Como matar o windows zombie tcp conexões?

11

Estou executando o link beyondtv no xp, conectando-me ao beyondtv um host do vista. O programa Link trava após cerca de 20 minutos e não tenho solução para isso. Quando isso acontece, usando o tcpview, vejo que o host tem cerca de 200 conexões zombie tcp restantes da conexão Link. Não consigo limpá-los, eles são do mesmo processo inexistente. As conexões permanecem até eu reiniciar o host. Reiniciar é a única maneira que encontrei para reconectar o beyondtv Link. Acho que existe um bug no beyondtv que está causando isso, mas não consigo obter respostas nos fóruns deles. Mas, de qualquer forma, gostaria de saber se existe uma maneira de eliminar todas essas conexões.

Editar: na verdade, são cerca de 3000 WAIT_CLOSE conexões acumuladas após cerca de 40 minutos e, em seguida, o cliente morre. Se eu fechar o aplicativo do servidor, todos esses soquetes agora serão exibidos como pertencentes a um processo -não-existente- no tcpview. Compreensível. Mas não há uma maneira de fechá-los sem reiniciar?

Paulo
fonte
Não existe uma maneira de começar uma recompensa por perguntas aqui? Não vejo um botão para isso.
P aul
você pode oferecer uma recompensa após a pergunta tem feito para 2 dias: superuser.com/faq
quack quixote
3
Fogo. Fogo ou espingarda.
Phoshi #
1
@phoshi: ou nuke-lo da órbita. é a única maneira de ter certeza.
quack quixote
1
Eu prefiro fazer o meu matando o caminho desgraça: superuser.com/questions/54937/3d-windows-managers/55130#55130
DaveParillo

Respostas:

10

Você pode usar o Currports da Nirsoft para monitorar e eliminar conexões.

Você pode automatizar a eliminação de um padrão de conexão usando o AutoHotKey.

majkinetor
fonte
7

CLOSE_WAIT significa que a conexão foi fechada na outra extremidade.

Evidentemente, o beyondtv não detecta essa condição e continua a enviar dados para o aplicativo na outra extremidade. A outra extremidade não pode enviar nada de volta por essa conexão, pois fechou o final da conexão.

A solução é configurar a entrada TcpTimedWaitDelay em

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters

Esta entrada determina o tempo que deve decorrer antes que o TCP possa liberar uma conexão fechada e reutilizar seus recursos. Esse intervalo entre o fechamento e a liberação é conhecido como o estado TIME_WAIT ou 2MSL. Durante esse período, a conexão pode ser reaberta com muito menos custo para o cliente e o servidor do que estabelecer uma nova conexão.

Por padrão, na minha máquina, ele contém o valor -1, que eu entendo como conexões fechadas nunca são liberadas, que é exatamente o comportamento que você está observando.

Sugiro que você defina o valor dessa entrada no intervalo permitido de 30 a 300 segundos. Suponho que 300 segundos = 5 minutos são suficientes para o seu caso, onde são necessários 40 minutos para congelar o computador.

harrymc
fonte
Procurando por TIME_WAITme trouxe aqui. Obrigado pela explicação e link.
Technext
oi, obrigado pela explicação. Ainda não está fechando as conexões TCP. CLOSE_WAIT aumentando. Tenho definir tempo limite para 30 segundos
aadi1295
1

Você pode forçar o Windows a forçar o fechamento de todas as conexões TCP 1) desabilitando e 2) reativando sua interface de rede. Se isso funcionar, você pode criar scripts em lote das etapas a serem executadas quando necessário.

Procurei alguma maneira de fazer isso via linha de comando, a partir do netshutilitário (ou similar), mas até agora não tive sorte.

Obviamente, a melhor maneira de corrigir isso é corrigir o aplicativo quebrado. Verifique se você está tentando a versão mais recente do aplicativo; continue incomodando os desenvolvedores; se você já possui a versão mais recente, tente localizar uma versão mais antiga do programa.

charlatão quixote
fonte
Atualizei o aplicativo para a versão mais recente, não ajudei e tenho um tíquete de suporte com eles. Tentei desabilitar as propriedades da rede e também desinstalar o gerenciador de dispositivos, e a lista de conexões WAIT_CLOSE não foi afetada. Esta é uma lista em algum lugar do sistema operacional que não consigo tocar, parece.
P aul
1

Você provavelmente está recebendo essas sessões CLOSE_WAIT por causa do programa interrompido - não sei dizer se você as suspeita como a causa, por isso só queria deixar isso claro.

Meu palpite é que eles não ficarão para sempre; provavelmente apenas por 2 horas e 5 segundos. Pode parecer uma eternidade, eu sei. Você pode tentar ajustar o KeepAliveTime (provavelmente requer uma reinicialização final) da sua conexão de rede para algo pequeno, como 5 minutos. Isso pode ajudá-los a desaparecer mais rapidamente, após a interrupção do programa.

Ou, se você sabe que pode executar o programa de maneira confiável por, digamos, 10 minutos por vez, você pode simplesmente reiniciá-lo periodicamente. Não sei se alguma dessas soluções é útil para sua situação específica; Concordo com o ~ charlatão que você deve abandonar a versão problemática do aplicativo o mais rápido possível.

Zac Thompson
fonte
Eu acho que o programa tem permissão para substituir a configuração do sistema no parâmetro KeepAliveTime, por isso pode não ajudar, mas concordo que pode valer a pena tentar. ajustá-lo pode levar a problemas com outros aplicativos.
quack quixote
0

Veja se o beyondtv está gerando outro processo que mantém as conexões abertas. O Process Explorer mostra se isso está acontecendo.

Joe Internet
fonte
Não consigo encontrar nenhum processo adicional. Fechar além doTV e todos os processos relacionados não tem efeito. Essas conexões aparecem com <inexistente> para o processo. O processo foi encerrado, mas as conexões não serão fechadas.
P aul
Eu estava jogando com os botões para cima / para baixo da classificação das respostas e não há como voltar a 0, é -1 ou 1, então deixei em 1. Seria melhor ter essa pergunta com 0 respostas neste momento, pois esta resposta não é útil - usei o Process Explorer e o tcpview por algum tempo antes de postar esta pergunta.
P aul
0

É possível que exista um problema de firewall? Pode ser uma conexão incompleta sendo tentada e tentada novamente.

Eu desativaria todos os firewalls nas duas máquinas e, se houver um roteador, também seu firewall interno.

harrymc
fonte
Eu também fiz isso antes. Reran o cenário, sem efeito, o problema permanece. No entanto, estou olhando para o roteador Linksys, vou investigar.
P aul