Назад | Перейти на главную страницу

Лопаются сокеты CLOSE_WAIT - может, из-за настроек iptables?

У меня есть виртуальный сервер Ubuntu 12.04, где в основном установленное программное обеспечение и конфигурация являются стандартными, плюс установка сервера причала 6, который обслуживает несколько веб-сайтов. Для простоты я не устанавливал apache httpd и использовал iptables для доступа к причалу (который работает на порту 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, в частности, для различных типов цепочек. Это работает, но иногда у меня возникает взрыв сокетов, которые постоянно находятся в состоянии CLOSE_WAIT. Я знаю, что означает это состояние, но поскольку я не писал код, который управляет сервлетами (они обрабатываются пристанью), я не могу решить проблему, исправив свой код. В конце концов, количество сокетов CLOSE_WAIT увеличивается и сервер не отвечает, поэтому мне приходится перезапускать причал.

Я искал похожие проблемы с CLOSE_WAIT и обнаружил только случаи, связанные с кодом программиста или проблемами с Tomcat, а не с Jetty. Мне было интересно, могут ли они быть связаны с частично сломанной конфигурацией iptables (альтернативой является ошибка в Jetty 6, но сначала я хочу исключить другие возможные причины).

Спасибо.

Еще одно быстрое продолжение, на случай, если оно может быть полезно другим. Несколько недель назад я обновил виртуальный сервер, на котором работает мой причал, перейдя с одного с 512 МБ ОЗУ на сервер с 1 ГБ ОЗУ. Вроде бы проблемы исчезли - в журнале перезапуска причала (см. Выше) последнее событие от 6 декабря.

Пока нет отзывов :-( Для других людей, у которых есть проблемы, я, по крайней мере, смог написать быстрый скрипт crontab, который обнаруживает проблему и перезапускает причал. Это не полностью решает проблему, но смягчает последствия.

#!/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