У меня есть виртуальный сервер 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