杀死CLOSE_WAIT套接字而不杀害Linux上的父进程

Tomcat离开我的CLOSE_WAIT套接字最终饱和最大连接数。

我已经尝试了很多方法在我的客户端和服务器代码来摆脱这些无济于事,包括closures连接,调用System.gc()等。

现在我正试图find一种方法来简单地在操作系统中快速排除这些问题。 我有conntrack工作,但不知道如何使用它来杀死这些连接。 我也设置了/ proc / sys / net / ipv4 / netfilter / ip_conntrack_tcp_timeout_close_wait为1,这当然太低了,但连接仍然存在。

有没有办法杀死这些僵尸套接字?

运行Ubuntu。

我相信在连接的服务器端的CLOSE_WAIT意味着服务器已经从客户端收到一个FIN,将已经确认这回到客户端,然后通知应用程序,它可以closures连接。

一旦满足所有数据已经​​从连接中读取,则应用程序放弃连接。

一旦它放弃连接,服务器将发送一个最终的FIN回到客户端,连接将被完全closures。

build议它与“TCP_tuning”无关

你确定你的应用程序正在closures套接字吗?

当我写了一个Python服务器,我学到了这一点:D

UPDATE
根据您的Tomcat版本,您可能遇到过这个问题,因为在Coyote的AJP协议中使用keepAliveTimeoutfunction在Tomcat 6中引入了一个错误。
这个问题的性质是由于Tomcat在keepAliveTimeout过期后无法closures套接字引起的。 Tomcat套接字将保持CLOSE_WAIT状态,但相应的mod_jk套接字将正常closures。

他的bug在SVN commit r589062中修复,并在Tomcat 6.0.15中发布