A execução de lsof -i mostra muitas conexões em CLOSE_WAIT? Devo me preocupar

8

Portanto, estou executando lsof -i | wc -l periodicamente e está me dizendo que, de 420 linhas, entre 240 e 255 estão em CLOSE_WAIT state. Como as conexões TCP entram nesse estado?

Eu deveria estar preocupado e como devo resolver isso?

    
por user20414 16.09.2009 / 17:26

4 respostas

11

(Eu ia editar a resposta do mikegrb, mas decidi que estava massacrando demais)

CLOSE_WAIT significa exatamente o que ele diz - o kernel está aguardando que o processo local feche seu descritor de arquivo antes de remover a entrada. A conexão TCP foi completamente demolida e a extremidade distante pode estar com a impressão de que a conexão é finito, mas o seu fim está segurando coisas.

A única preocupação é que muitas entradas CLOSE_WAIT consomem memória do kernel e entradas da tabela de descritores de arquivos, o que pode ser um problema se houver grandes pilhas delas. Se as entradas que você está vendo são transitórias, provavelmente é só porque você está passando por um lote de conexões TCP, e você está vendo uma pequena fração delas no pequeno período de tempo entre quando a conexão é fechada e o processo se aproxima de fechar o descritor de arquivo. Por outro lado, se eles são permanentes (as portas e os endereços IP não mudam com o tempo) então algo está vazando descritores e ele precisa ser corrigido para que ele sempre feche seus fds quando terminar com eles. Como mikegrb disse, uma versão mais nova pode já ter corrigido o problema, então uma pergunta na lista de discussão relevante ou exame de changelogs é provavelmente garantida.

    
por 17.09.2009 / 02:18
1

O estado CLOSE_WAIT significa que a outra extremidade enviou um segmento FIN para fechar a conexão. A conexão ainda está meio estabelecida. Está em um modo que você poderia pensar como half duplex, permitindo que este fim libere qualquer buffer, enviando os últimos bits de dados para o final solicitando que a conexão seja fechada antes de fechar a conexão a partir deste fim.

Se você tiver muitas conexões hospedadas em CLOSE_WAIT, isso significa que o processo responsável não está fechando o soquete quando entra em CLOSE_WAIT. Você poderia usar o tcpdump, ou outras ferramentas de captura de tráfego de rede, para examinar os pacotes.

Veja também o processo responsável. Por curiosidade, qual é o processo responsável? Pode ter uma nova versão fixa disponível ou talvez seja hora de enviar um relatório de bug;)

    
por 16.09.2009 / 18:18
0

se você operar em uma rede fraca, poderá ajustar:

  • Número máximo de descritores de arquivos via ulimits e via /proc (todo o sistema)
  • Você pode reduzir o tempo de espera do TCP por meio de /proc
por 17.09.2009 / 17:16
0

Provavelmente você não está fechando um recurso (manipulador de arquivo, conexão de rede) em algum lugar de um aplicativo em execução no servidor.

    
por 09.06.2014 / 21:34