CLOSE_WAIT套接字爆裂 – 也许是因为iptables的设置?

我有一个Ubuntu 12.04服务器虚拟箱,其中基本上安装的软件和configuration是默认的,另外还安装了一个服务器几个网站的jetty 6服务器。 为了简单起见,我并没有安装Apache httpd,而是使用iptables将端口80(在8080端口上运行)公开到端口80.这些是

  / sbin / iptables -t nat -L 

Chain PREROUTING (policy ACCEPT) target prot opt source destination REDIRECT tcp -- anywhere localhost tcp dpt:http redir ports 8080 REDIRECT tcp -- anywhere Ubuntu-1104-natty-64-minimal tcp dpt:http redir ports 8080 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination REDIRECT tcp -- anywhere localhost tcp dpt:http redir ports 8080 REDIRECT tcp -- anywhere Ubuntu-1104-natty-64-minimal tcp dpt:http redir ports 8080 Chain POSTROUTING (policy ACCEPT) target prot opt source destination 

我必须承认我对iptables的工作原理有一个浅薄的理解,特别是对于不同types的链。 这个东西很有效,但是有时候我有一个永久保持CLOSE_WAIT状态的套接字爆炸。 我知道这个状态是什么意思,但是因为我没有编写pipe理servlet的代码(它们由jetty处理),所以我无法通过修补我的代码来解决问题。 最终,CLOSE_WAIT套接字的数量会增加,导致服务器无法响应,所以我必须重新启动jetty。

我用CLOSE_WAIT来查找类似的问题,只发现与程序员代码有关的情况,或者与Tomcat有关的问题,而不是Jetty。 我想知道他们是否可能与部分损坏的iptablesconfiguration有关(替代scheme是Jetty 6中的一个错误,但我首先要排除其他可能的原因)。

谢谢。

到目前为止,没有任何反馈: – (对于其他人有一些麻烦,我至less已经能够写一个快速的crontab脚本检测到问题,并重新启动jetty。这并不能完全解决问题,但减轻效果。

 #!/bin/sh CLOSE_WAIT_COUNT=`/bin/netstat | /bin/grep CLOSE_WAIT | /usr/bin/wc -l` TIMESTAMP=`/bin/date` THRESHOLD=5 echo "$TIMESTAMP Reported $CLOSE_WAIT_COUNT sockets in CLOSE_WAIT state..." >> /var/log/jettyrestarter.log if [ $CLOSE_WAIT_COUNT -gt $THRESHOLD ] then echo "$TIMESTAMP Restarting jetty" >> /var/log/jettyrestarter.log service jetty restart fi 

另一个快速的后续行动,以防万一它可以为其他人有用。 几个星期前,我已经升级了我的docker运行的虚拟服务器,从512MB的RAM移动到1GB的RAM。 似乎这个问题已经消失了 – 在docker上(见上),最新的事件是从12月6日开始的。