java - 通过 JDBC Driver Manager 运行 mysql 准备好的语句(慢于 10 秒)时,Tomcat 6 没有得到任何响应

标签 java mysql windows tomcat jdbc

我在使用现有的基于 servlet 的应用程序(有点旧)时遇到了一个奇怪的问题。

如果 mysql 准备语句运行速度低于 10 秒,我无法让任何 servlet 完成操作(我在此应用程序中只有准备语句)。

我对更快的查询(少于 10 秒)没有问题。

catelina.out 没有任何痕迹,也没有浏览器界面。当我通过 fiddler 检查浏览器请求时,它显示

"This session is not yet complete. Press F5 to refresh when session is complete for updated statistics. Request Count: 1 Bytes Sent:
437 (headers:437; body:0) Bytes Received: 0 (headers:0; body:0)"

MySQL“SHOW FULL PROCESSLIST”命令显示特定套接字连接(慢速查询)运行约 12 秒,COMMAND="Execute"和 STATE="Sending Data",然后更改为 COMMAND="Sleep"和 STATE =""并保持这种状态很长时间(超过 500 秒)。 理想情况下,此连接不应保持如此长时间的 hibernate 状态,而是在发送数据完成后关闭。

netstat -ab 命令显示与 tomcat6.exe 和 mysqld.exe 下的 ESTABLISHED 相同的连接。 理想情况下,一旦查询执行完成,这应该保持为 TIME_WAIT,直到“TcpTimedWaitDelay”值。

此查询的预期负载非常小(大约 2kbytes)。

MySQL connect_timeout=100 和 Tomcat connectionTimeout="100000"(对于我运行应用程序的端口 8000)。

我没有尝试更改的一件事是 JDBC DriverManager.setLoginTimeout 属性,因为它只关心获得连接。

此应用在几天前运行良好。但我没有任何关于那几天查询执行时间的统计数据。

我运行的是 windows 2008 R2 标准版、tomcat 6 和 MySQL 5.5。

我无法查明此行为的任何原因。非常感谢您的帮助。

最佳答案

这似乎是与 MySQL 连接器相关的问题。我们使用的是旧连接器(版本 3.1.x)。最新稳定版(5.1.20)修复了该问题。

关于java - 通过 JDBC Driver Manager 运行 mysql 准备好的语句(慢于 10 秒)时,Tomcat 6 没有得到任何响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10524310/

相关文章:

java - 控制在 Java 中创建的临时文件的名称

php - mySQL "Rank in Highscore"- 查询

mysql - UTF8 在翻译中丢失,HTML 格式从/到 mysql

mysql - 在一个mysql列中存储多个数据并单独检索数据

java - 如何使用 Eclipse 中的数据库

windows - 如何更改 Vim 中的默认保存位置?

c# - 在 "Metro"windows 8 程序中设置鼠标光标位置

java - Java中使用delete()方法删除文件

java - java中的ActionListener在第二次单击时执行操作

java - 方法定义中的类型参数<T>是什么意思?