2010-05-23 154 views
2

netstat -an的输出在CLOSE_WAIT状态下显示很多mysql连接,当我使用'SHOW PROCESSLIST'检查mysql中的进程列表时,netstat中显示的连接没有出现。什么可能是这个原因。我使用带有mysql连接器的tomcat,并使用连接池。Netstat为mysql连接显示了许多CLOSE_WAIT状态

难道应用程序没有关闭MySQL连接或是否有其他原因的行为......有时CLOSE_WAIT达到了200

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

任何帮助,将不胜感激。

+0

难道这些服务器或应用程序的机器上? – Donnie 2010-05-23 13:20:29

+1

*“是否应用程序未关闭mysql连接”*看起来如此:http://www.sunmanagers.org/pipermail/summaries/2006-January/007068.html听起来像连接池问题。 – 2010-05-23 13:21:29

回答

1

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

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

interactive_timeout 
    wait_timeout 

如果这些都太短,就会造成这个问题。当使用池化时,我们通常将两者都设置为1小时。

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

+0

交互式超时值是28800,wait_timeout值是1200 ..我猜他们不是短暂的,为什么会发生这种情况? – Sudheer 2010-05-25 19:45:07

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 previosly有多达睡眠连接的400 ...