1

我对现有的基于 servlet 的应用程序(一个有点旧的应用程序)有一个奇怪的问题。

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

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

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

“此会话尚未完成。会话完成时按 F5 刷新以获取更新的统计信息。请求计数:1 发送的字节:
437(标头:437;正文:0)接收的字节:0(标头:0;正文:0) "

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

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。

我无法将这种行为归咎于任何原因。非常感谢您的帮助。

4

1 回答 1

1

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

于 2012-05-11T11:42:33.193 回答