CLOSE_WAIT sockets burst - talvez por causa das configurações do iptables?

1

Eu tenho uma caixa virtual do servidor Ubuntu 12.04, onde basicamente o software e a configuração instalados são os padrões, além da instalação de um servidor do tipo jetty 6 que atende a alguns sites. Para manter as coisas simples, não instalei o apache httpd e usei o iptables para expor o jetty (que é executado na porta 8080) na porta 80. Esses são os resultados de

/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         

Devo confessar que tenho uma compreensão superficial de como o iptables funciona, em particular para os diferentes tipos de cadeias. Essa coisa funciona, mas às vezes eu tenho uma explosão de soquetes que ficam permanentemente no estado CLOSE_WAIT. Eu sei sobre o que este estado significa, mas desde que eu não escrevi o código que gerencia servlets (eles são manipulados pelo jetty) eu não posso consertar o problema, remendando meu código. Eventualmente a quantidade de soquetes CLOSE_WAIT se acumula e faz com que o servidor não responda, então eu tenho que reiniciar o Jetty.

Eu procurei por problemas similares com CLOSE_WAIT e encontrei apenas casos relacionados ao código do programador, ou problemas com o Tomcat, não o Jetty. Eu queria saber se eles poderiam estar relacionados a uma configuração parcialmente quebrada do iptables (a alternativa é um bug no Jetty 6, mas primeiro quero excluir outras causas possíveis).

Obrigado.

    
por Fabrizio Giudici 28.09.2012 / 10:27

2 respostas

0

Até agora, nenhum feedback :-( Para outras pessoas que têm o problema, eu pude ao menos escrever um script crontab rápido que detecta o problema e reinicia o jetty. Isso não resolve totalmente o problema, mas atenua os efeitos.

#!/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
    
por 26.10.2012 / 20:56
0

Outro acompanhamento rápido, apenas no caso de ser útil para outras pessoas. Algumas semanas atrás eu atualizei o servidor virtual onde meu jetty é executado, passando de um com 512MB de RAM para um com 1GB de RAM. Parece que os problemas desapareceram - no log do jettyrestarted (veja acima) o último evento é de 6 de dezembro.

    
por 02.01.2013 / 12:12