netstat -an的输出显示CLOSE_WAIT状态下的许多mysql连接,当我使用'SHOW PROCESSLIST'检查mysql中的进程列表时,netstat中显示的连接不会出现。可能是什么原因造成的。我使用tomcat和mysql-connector并使用连接池。
是应用程序没有关闭mysql连接还是有任何其他原因导致此行为...有时CLOSE_WAIT超过200.
在应用程序级别,我确保关闭所有连接(确保我在finally块中发出close()命令)使用jdbc创建。
任何帮助都将不胜感激。
答案 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个睡眠连接......