Eu tenho uma máquina SLES que acumula conexões TCP em um estado CLOSE_WAIT pelo que parece ser para sempre. Esses descritores acabam sugando toda a memória disponível. No momento, tenho 3037 deles, mas foi muito maior antes de uma reinicialização apressada recentemente.
O interessante é que eles não são de conexões com portas locais que eu espero ter processos de escuta. Eles não têm PIDs associados e seus cronômetros parecem ter expirado.
# netstat -ton | grep CLOSE_WAIT
tcp 176 0 10.0.0.60:54882 10.0.0.12:31663 CLOSE_WAIT off (0.00/0/0)
tcp 54 0 10.0.0.60:60957 10.0.0.12:4503 CLOSE_WAIT off (0.00/0/0)
tcp 89 0 10.0.0.60:50959 10.0.0.12:3518 CLOSE_WAIT off (0.00/0/0)
# netstat -tonp | grep CLOSE_WAIT
tcp 89 0 10.0.0.59:45598 10.0.0.12:1998 CLOSE_WAIT -
tcp 15 0 10.0.0.59:60861 10.0.0.12:1938 CLOSE_WAIT -
tcp 5 0 10.0.0.59:56173 10.0.0.12:1700 CLOSE_WAIT -
Eu não sou faixa-preta quando se trata da pilha TCP ou da rede do kernel, mas a configuração do TCP parece sã, já que esses valores são padrão, de acordo com a página de manual:
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
Então, o que dá? Se os temporizadores expiraram, a pilha não deve limpar automaticamente essas coisas? Estou efetivamente me dando uma declaração de longo prazo à medida que essas coisas se desenvolvem.
sudo netstat -tonp
ver com qual programa isso está ocorrendo.