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?

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.


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;)


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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.