连接到SYN_SENT中的mysql服务器

从我们的应用服务器和数据库服务器(Mysql)之间的连续几天,我们面临着一个奇怪的问题:从应用程序服务器连接到数据库服务器挂起SYN_SENT状态,之后我们无法在mysql端口上连接数据库服务器3306)。 当我们检查数据库服务器上的netstat输出时,它处于SYN_RECV状态。

我可以看出,mysql服务器正在接收SYN请求,并且响应也没有到达客户端,因此服务器端的SYN_RECV和客户端的SYN_SENT 。 我认为SYN_SENT状态应该过了一段时间,因为这个其他数据库连接尝试到同一台服务器不应该挂起。

有谁知道我们如何解决这个问题?

输出设置细节:

应用程序服务器: RHEL 5.4,kernel-release = 2.6.18-164.el5,x86_64

数据库服务器: Mysql版本:5.1.49 RHEL 5.4,kernel-release = 2.6.18-164.el5,x86_64

晚上,我的供应商遇到了这个问题。 它看起来像你和目标主机之间的链路中的一些路由器不适合与tcp_sack一起工作。 解决方法是在/etc/sysctl.conf中禁用它

 net.ipv4.tcp_sack = 0 

但是这对于服务器来说是非常糟糕的,因为它会减慢TCP连接。 你应该滥用你的提供者