Mysql连接没有发布?

时间:2013-06-09 07:56:34

标签: mysql activerecord tcp

这是事情:   我有一个名为A的应用程序服务器和一个名为B的数据库服务器。

在B(DB)上,当我运行netstat -ntp | grep 'A's IP' | wc -l时,我看到超过400个TCP连接。   当我使用MySQL客户端连接MySQL并运行select count(*) from processlist where host like 'A's IP%'时,我也看到了超过400个结果,所以看起来MySQL和&操作系统同意A有超过400个开放式连接。

但是,当我登录A时,运行netstat -ntp | grep 'B's IP' | wc -l,我只看到100多个TCP连接。

那怎么会发生这种情况呢?我使用netstat错了,或者是什么?我只是不明白为什么两个主机不同意它们之间有多少TCP连接。

快速更新: 我们实际上在A上有6个不同的项目(有些是Rails 3.2,有些是Rails 2.3),其中一个是redmine。我在B上抓取show processlist结果,将其与A上的netstat -ntp进行比较,发现B上不匹配的连接来自不同的项目,包括redmine。

PS:两个操作系统都是CentOS 5.4,MySQL是Percona 5.1.57-rel12.8-log

PS2:我们重新启动了所有服务器/硬件,但问题仍然存在。由于它完全出乎意料,我猜测问题/错误始终存在,但我们没有注意到它直到达到我们设置的1000个最大连接。所以任何疯狂的猜测?它可能是一个应用程序代码错误(activerecord或mysql gem)? OS bug?或者什么?

1 个答案:

答案 0 :(得分:1)

A上的应用程序在完成时可能无法正确关闭与MySQL的连接。

当进程终止于A时,操作系统必须自动丢弃它们拥有的连接,但B仍在等待来自A的信号。

当达到(MySQL)超时延迟时,B将最终释放这些连接。

如果不了解A上的应用程序,很难更具体,但这里没有什么可惊讶的(除非你没想到A上的应用程序被打破了)。