Netstat显示了许多用于mysql连接的CLOSE_WAIT状态

时间:2010-05-23 13:17:58

标签: java mysql

netstat -an的输出显示CLOSE_WAIT状态下的许多mysql连接,当我使用'SHOW PROCESSLIST'检查mysql中的进程列表时,netstat中显示的连接不会出现。可能是什么原因造成的。我使用tomcat和mysql-connector并使用连接池。

是应用程序没有关闭mysql连接还是有任何其他原因导致此行为...有时CLOSE_WAIT超过200.

在应用程序级别,我确保关闭所有连接(确保我在finally块中发出close()命令)使用jdbc创建。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果netstat在应用程序机器上完成,则可能意味着错误配置的MySQL服务器。

请检查MySQL服务器中的以下全局变量,

  interactive_timeout
  wait_timeout

如果其中任何一个太短,都会导致此问题。我们通常在使用合并时将两者都设置为1小时。

当服务器关闭连接但是连接池没有机会关闭连接时,TCP卡在CLOSE_WAIT状态。

答案 1 :(得分:0)

我们遇到了与IIS相同的问题。 在Windows机器上我们有:

$ netstat -on | sed '1,4d' | sed 's/:/ /g' | awk '{print $6}' | sort | uniq -c

287 CLOSE_WAIT

121 ESTABLISHED

2 SYN_SENT

1 TIME_WAIT

关于MySQL:

`的MySQL>显示全局变量,例如“interactive_timeout”;

interactive_timeout 28800

的MySQL>显示全局变量,如“wait_timeout”;

wait_timeout 1440 `

我们将其更改为wait_timeout = 3660,会看到它会有所帮助。

PS:wait_timeout = 1440已经完成,因为db通常有多达400个睡眠连接......