事情是这样的:我有一个名为 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 和 OS 似乎都同意有超过 400 个与 A 的打开连接。
但是,当我登录到 A,运行时netstat -ntp | grep 'B's IP' | wc -l
,我只看到超过 100 个 TCP 连接。
那么这怎么会发生呢?是我用netstat
错了,还是什么?我只是不明白为什么两个主机不同意它们之间有多少 TCP 连接。
快速更新:我们实际上在 A 上有 6 个不同的项目(一些是 Rails 3.2,一些是 Rails 2.3),其中一个是 redmine。我show processlist
在 B 上获取结果,将其与netstat -ntp
A 上的结果进行比较,发现 B 上的不匹配连接来自不同的项目,包括 redmine。
PS:两个操作系统都是CentOS 5.4,MySQL是Percona 5.1.57-rel12.8-log
PS2:我们重新启动了所有服务器/硬件,但问题仍然存在。由于它完全出乎意料,我猜问题/错误总是在那里,但直到它达到我们设置的 1000 个最大连接时我们才注意到它。所以有什么疯狂的猜测吗?它可能是应用程序代码错误(activerecord 或 mysql gem)吗?操作系统错误?或者是什么?