O Windows Server 2012 R2 fica sem portas efêmeras, embora não deva

9

Estamos regularmente enfrentando problemas estranhos com a rede no nosso servidor dedicado. Ele executa o Windows Server 2012 R2 x64 no Xeon E5620 com 16 GB de RAM e adaptador de rede Intel 82575EB.

Tenha em atenção que já ajustámos HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters valores-chave TcpTimedWaitDelay e MaxUserPort para 30 e 65530, respectivamente.

Em um ponto aleatório, nossos sites param de responder, porque não podem se conectar a um banco de dados local. São aproximadamente 2 semanas de atividade quando esses problemas começam a ocorrer. O log do sistema começa a receber avisos TCPIP 4227 e 4231. Ele diz "Uma solicitação para alocar um número de porta efêmero do espaço da porta TCP global falhou devido a todas essas portas estarem em uso.".

Se eu correr

Get-Counter -Counter \TCPv4\*

ou

Get-Counter -Counter \TCPv6\*

ou

netstat -abn | find /c ":"

Sempre obtenho um valor razoável de 500 a 1500 conexões, o que não chega nem perto do limite de 65 K.

Além disso, "localhost" pára de resolver para :: 1 localmente, revertendo para 127.0.0.1
Somente uma reinicialização forçada da máquina pode resolver a situação.

Poderia ser um problema de adaptador de rede?

UPDATE 1

Isso aconteceu novamente e pareceu ter sido resolvido quando reiniciei o servidor de e-mail. Estranho, porém, todos os contadores mostraram ~ 1000 conexões com ~ 500 sendo ativo no momento, e ainda o erro de socket 10055 ao tentar se conectar ao banco de dados que não tem nada a ver com o servidor de email.

UPDATE 2 Isso é estranho, mas a reinicialização diária dos serviços de email corrige o problema completamente.

    
por CamaroSS 02.12.2014 / 07:38

4 respostas

6

Eu tive problema semelhante com o esgotado pool de portas TCP / IP no WinSvr 2012R2 x64 por quase 1 mês em que o servidor parou de receber conexões novas e TCP. Então eu joguei com valores de registro e estes são estáveis para mim:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:0000fffe
"TcpNumConnections"=dword:00fffffe
"TcpMaxDataRetransmissions"=dword:00000005
  • TcpTimedWaitDelay - 30
  • MaxUserPort - 65534
  • TcpNumConnections - deve estar no estado padrão estendido para o máximo = 16777214 deve impedir que o servidor esgote as portas efêmeras.
  • TcpMaxDataRetransmissions - Limite de tempo limite de retransmissão de segmentos de dados não confirmados do TCP na conexão real = 5.

Em resultado igual ao seu. Eu acho que você deve considerar a auditoria do seu comportamento de desempenho de aplicativos / scripts. Se tudo estiver ok e nada ajudar, então você pode tentar colocar o servidor proxy antes de seu servidor de aplicações web, fazer 2 nós com o servidor web (IIS, Apache, ...) que irá compartilhar o mesmo conteúdo estático e acessar mesmo banco de dados ao mesmo tempo (se você tiver recursos suficientes na sua empresa).

Talvez este artigo possa ajudá-lo de alguma forma: link

    
por 12.01.2015 / 13:03
2

Houve o mesmo problema no Windows Server 2016 executando grandes quantidades de testes do Selenium usando o chromewebdriver. Este script PS irá configurar automaticamente as configurações @Myke compartilhadas acima. O comando shutdown foi adicionado porque uma reinicialização é necessária para as alterações da pilha TCP.

Aumentar o tamanho do pool para portas TCP efêmeras

Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name MaxUserPort -Value 65534 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpTimedWaitDelay -Value 30 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpNumConnections -Value 16777214 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpMaxDataRetransmissions -Value 5 -Force | Out-Null

shutdown -r -t 0

Esta foi a mensagem de erro que recebemos em Webdriver.Quit() informando que um endereço TCP estava em uso.

Error: EADDRINUSE connect EADDRINUSE 127.0.0.1:12843 at ClientRequest. (\node_modules\selenium-webdriver\http\index.js:238:15)
From: Task: WebDriver.quit()

    
por 02.07.2017 / 01:08
1

Você se certificou de não vazar objetos de conexão de banco de dados? Você precisa fechar cada conexão de banco de dados aberta, explicitamente (com try-finally) ou com um bloco {}. Este é um problema comum que o ASP não lhe dirá diretamente.

    
por 13.12.2014 / 06:22
1

Além das configurações do driver Tcpip, o intervalo de portas TCP efêmeras é gerenciado no Windows Server usando o comando netsh ( source ).

Você pode visualizar o intervalo de portas dinâmicas com os seguintes comandos:

  • netsh int ipv4 show dynamicport tcp
  • netsh int ipv4 show dynamicport udp
  • netsh int ipv6 show dynamicport tcp
  • netsh int ipv6 show dynamicport udp

Para alterar o intervalo de portas, use este comando:

  • netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range

Por exemplo:

netsh int ipv4 set dynamicport tcp start=49152 num=16384

A configuração (start = 49152 num = 16384 ) também é o padrão no Windows Server 2008 em diante.

    
por 24.07.2017 / 09:46