SO: Windows Server 2008, SP2 (executando no EC2 Amazon).
A execução do aplicativo Web usando o servidor Apache httpd e tomcat 6.02 e o servidor Web possui configurações de manutenção.
Existem cerca de 69.250 (porta http 80) + 15000 (exceto a porta 80) conexões TCP no estado TIME_WAIT (usado netstat & tcpview). Essas conexões parecem não fechar mesmo após a interrupção do servidor da Web (esperou 24 horas)
Contadores de monitor de desempenho:
- Conexões ativas TCPv4: 145K
- Conexões passivas TCPv4: 475K
- Conexões de falha TCPv4: 16K
- Redefinição de conexões TCPv4: 23K
HKEY_LOCAL_MACHINE\System \CurrentControlSet\Services\Tcpip\Parameters
não possui a chave TcpTimedWaitDelay, portanto, o valor deve ser o padrão (2 * MSL, 4 minutos)
Mesmo que existam milhares de solicitações de conexão ao mesmo tempo, por que o sistema operacional Windows não pode limpá-las eventualmente?
Quais poderiam ser as razões por trás dessa situação?
Existe alguma maneira de fechar com força todas essas conexões TIME_WAIT sem reiniciar o sistema operacional Windows?
Depois de alguns dias, o aplicativo para de fazer novas conexões.
fonte
QueryPerformanceCounter
causa raiz do problema ainda pode estar em vigor e apenas o problema do TCP em questão foi corrigido? Obrigado pela sua compreensão!A resposta de Ryan é um bom conselho geral, exceto que não se aplica à condição que Ravi está enfrentando no EC2. Também vimos esse problema e, por qualquer motivo, o Windows ignora completamente o TcpTimedWaitDelay e nunca libera o soquete do estado TIMED_WAIT.
Esperar não ajuda ... reiniciar o aplicativo não ajuda ... o único remédio que encontramos é reiniciar o sistema operacional. Realmente feio.
fonte
Eu encontrei esse segmento completamente aleatoriamente enquanto procurava depurar um problema separado, mas esse é um problema pouco conhecido, mas conhecido no Windows no EC2. Estamos habituados a ter suporte premium, e discutiu isso com eles em um ambiente não-público através desse canal, mas este é um problema relacionado que se discutem nos fóruns públicos .
Como outros já mencionaram, você precisa ajustar os Servidores Windows imediatamente. No entanto, da mesma maneira que o StopWatch não está funcionando no encadeamento acima, a pilha TCP / IP também usa a
QueryPerformanceCounter
chamada para determinar exatamente quando o período TCP_TIME_WAIT deve durar. O problema é que, no EC2, eles encontraram e conhecem um problema queQueryPerformanceCounter
dá errado, e pode retornar tempos distantes e distantes no futuro; não é que seu estado TIME_WAIT esteja sendo ignorado, é que o tempo de expiração de TIME_WAIT é potencialmente anos no futuro. Ao executar em uma configuração httpd, é possível ver como você acumula rapidamente esses soquetes zumbis quando o estado é encontrado (geralmente vemos que este é um evento discreto, não que você acumule zumbis lentamente).O que fazemos é executar um serviço em segundo plano que consulta o número de soquetes no estado TIME_WAIT e, uma vez que isso paira sobre um determinado limite, agimos (reinicializamos o servidor). De alguma forma, nos últimos 45 segundos , alguém apontou que você pode parar / iniciar o servidor para corrigir o problema - sugiro que você junte essas duas abordagens.
fonte
As configurações padrão para a pilha TCP no Windows são, no mínimo, não ideais para sistemas que hospedam um servidor HTTP.
Para tirar o melhor proveito da sua máquina Windows quando usado como servidor HTTP, há alguns parâmetros que você normalmente ajustaria, como MaxUserPort TcpTimedWaitDelay, TcpAckFrequency, EnableDynamicBacklog, KeepAliveInterval etc.
Eu escrevi uma nota para isso sobre isso há alguns anos atrás, para o caso de precisar de alguns padrões rápidos para começar. Sinta-se livre para entender os parâmetros e depois ajustá-los.
fonte
Independentemente da AWS, acabamos de encontrar este problema, como resultado deste artigo da Base de Dados de Conhecimento:
http://support.microsoft.com/kb/2553549/en-us
Basicamente, ele entra em ação se um sistema estiver ativo por> 497 dias e o hotfix não foi aplicado. Uma reinicialização, é claro, a eliminou - talvez não saibamos nos próximos 16 meses se o hotfix funcionou, mas isso pode ajudar qualquer pessoa que tenha servidores de tempo de atividade por aí.
fonte
Eu estava experimentando exatamente a mesma coisa em várias caixas com o Windows Server 2008 R2 x64 com SP1, principalmente com CLOSE_WAIT (que é um pouco diferente de TIME_WAIT). Encontrei esta resposta que referenciava um KB na Microsoft e um hotfix se os servidores estivessem executando atrás de um balanceador de carga (quais são os meus). Depois de instalar o hotfix e reiniciar, todos os itens CLOSE_WAIT foram resolvidos.
fonte