A execução de lsof -i mostra várias conexões em CLOSE_WAIT? Eu deveria me preocupar

7

Então, eu estou executando lsof -i | wc -lperiodicamente e está me dizendo que das 420 linhas, entre 240 e 255 estão no CLOSE_WAITestado. Como as conexões TCP entram nesse estado?

Devo estar preocupado e como devo solucionar isso?

user20414
fonte

Respostas:

12

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

CLOSE_WAIT significa praticamente exatamente o que diz - o kernel está aguardando o processo local fechar seu descritor de arquivo antes de remover a entrada. A conexão TCP foi completamente interrompida e a extremidade oposta pode ter a impressão de que a conexão é finita, mas a extremidade está aguentando.

A única preocupação é que muitas entradas CLOSE_WAIT consomem memória do kernel e entradas da tabela descritor de arquivos, o que pode ser um problema se houver grandes pilhas delas. Se as entradas que você está vendo são transitórias, é provável que você esteja percorrendo muitasde conexões TCP, e você verá uma pequena fração delas no pequeno período de tempo entre o fechamento da conexão e o processo de fechamento do descritor de arquivo. Por outro lado, se eles são permanentes (as portas e os endereços IP não mudam com o tempo), algo está vazando nos descritores e precisa ser corrigido para que ele sempre feche o fds quando terminar com eles. Como o mikegrb disse, uma versão mais recente já pode ter corrigido o problema, portanto é provável que seja necessária uma pergunta na lista de discussão relevante ou no exame dos registros de alterações.

mulher
fonte
As conexões TCP em CLOSE_WAIT consomem descritores de arquivo? Porque ontem recebi um problema de exceção de soquete "Muitos arquivos abertos".
User20414 17/09/09
2
Sim, as entradas CLOSE_WAIT são descritores de arquivos abertos.
Womble
2

O estado CLOSE_WAIT significa que a outra extremidade enviou um segmento FIN para fechar a conexão. A conexão ainda está estabelecida. Está em um modo que você pode pensar em half-duplex, permitindo que essa extremidade libere quaisquer buffers, enviando os últimos bits de dados para a extremidade solicitando que a conexão seja fechada antes de fechar a conexão a partir dessa extremidade.

Se você tiver muitas conexões em CLOSE_WAIT, significa que o processo responsável não está fechando o soquete depois que entra em CLOSE_WAIT. Você pode 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 versão fixa mais recente disponível ou talvez seja hora de registrar um relatório de bug;)

mikegrb
fonte
Apache Tomcat 5.5.27
user20414 17/09/09
0

se você opera em rede fraca, pode sintonizar:

  • Número máximo de descritores de arquivos via ulimitse via /proc(em todo o sistema)
  • Você pode reduzir o tempo de espera do TCP via /proc
jscott
fonte
0

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

Michael Munsey
fonte