持久性TCP连接太多

时间:2016-06-13 09:30:00

标签: linux sockets tcp connection

我们有大约500个客户端连接到Linux RedHat ES 5服务器。 最近发生的情况是,服务器仍然保持与已经重启的客户端的连接,而不停止之前与服务器通信的应用程序。 客户端上的netstat始终只返回与服务器建立的一个连接。客户端重新启动后,通信将在新建立的连接上运行。在服务器端,有时旧连接关闭,有时它保持在建立状态,以便我们与每个客户端建立的连接数量不断增加。 由于各种客户端操作系统都受到影响,我认为这不是一个应用程序问题,而是服务器的Linux操作系统之一。 我试着调整

的值
  • net.ipv4.tcp_keepalive_time = 600
  • net.ipv4.tcp_keepalive_intvl = 10
  • net.ipv4.tcp_keepalive_probes = 9

没有成功。 此外,我尝试将最大文件句柄值设置为1024到2048,但连接仍然永远不会关闭,即使在TCP保持活动时间到期后也是如此。 有人知道可能导致这种奇怪行为的原因吗?

1 个答案:

答案 0 :(得分:1)

这些设置允许您配置默认的保持活动行为(启用保持活动时)。但是,它们不能自动保持活动。仍然必须通过SO_KEEPALIVE套接字选项在每个套接字上显式启用该功能。

有关详细信息,请参阅http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/。从第3节开始:

  

请记住,即使在内核中配置了keepalive支持,也不是Linux中的默认行为。程序必须使用setsockopt接口为其套接字请求keepalive控制。