Obtendo o sistema faltou espaço suficiente no buffer ou porque uma fila estava cheia

5

Meu aplicativo ASP.NET e SQL Server 2012 está sendo executado no Windows Server 2008 R2. De repente, minha internet no servidor parou de funcionar e meu aplicativo começou a ser lançado,

An operation on a socket could not be performed because the system lacked sufficient buffer 
space or because a queue was full

Executando netstat mostrando que PID = 0 abrindo muitas portas. Netstat dizendo isso,

Process Id = 0, State = TIME_WAIT have 130,053 ports open
Process Id = 38840, State = CLOSE_WAIT have 5 ports open
Process Id = Any, State = LISTENING have 30 ports open
Process Id = Any, State = ESTABLISHED have 10 ports open

Estatísticas 22 de dezembro de 2015,

CLOSE_WAIT  5   
ESTABLISHED 146
TIME_WAIT   646750
LAST_ACK    1
LISTENING   30
    
por user960567 20.11.2014 / 07:44

2 respostas

7

Você está executando um servidor da Web que é acessado por navegadores de vários dispositivos móveis.

Devido à maneira como o TCP / IP funciona, as conexões não podem ser fechadas imediatamente. Os pacotes podem chegar fora de ordem ou ser retransmitidos após a conexão ter sido fechada. CLOSE_WAIT indica que o terminal remoto (outro lado da conexão) fechou a conexão. TIME_WAIT indica que o terminal local (este lado) fechou a conexão. A conexão está sendo mantida de forma que qualquer pacote atrasado possa ser correspondido à conexão e manipulado apropriadamente. As conexões serão removidas quando expirarem dentro do período padrão de quatro minutos.

No entanto, o número ao lado de sua estatística TIME_WAIT, 646750, é extremamente excessivo. Isso significa que 646750 conexões foram fechadas nos últimos 4 minutos, o que faz 2694 por segundo! Evidentemente, alguns desses dispositivos móveis estão com problemas de funcionamento e estão bombardeando seu servidor com conexões que não estão sendo corretamente fechadas do lado do cliente, ou que você está servindo número enorme de clientes (o que não faz sentido para um único servidor).

Se você não conseguir isolar quais dispositivos móveis ou aplicativos estão na causa do problema e para corrigi-los, você não controla o lado do cliente e só pode aliviar o problema no lado do servidor.

Um parâmetro que pode melhorar esse congestionamento é TcpTimedWaitDelay , descrito como:

Determines the time that must elapse before TCP can release a closed connection and reuse its resources. This interval between closure and release is known as the TIME_WAIT state or 2MSL state. During this time, the connection can be reopened at much less cost to the client and server than establishing a new connection.

Reducing the value of this entry allows TCP to release closed connections faster, providing more resources for new connections. However, if the value is too low, TCP might release connection resources before the connection is complete, requiring the server to use additional resources to reestablish the connection.

TcpTimedWaitDelay pode ser modificado pelo regedit em %código%. Ele contém o número de segundos a aguardar. O padrão é 240 segundos (4 minutos). A reinicialização é necessária se alterada.

Por exemplo, mudar para 30 segundos e 2694 conexões por segundo significa que apenas 80820 conexões estarão esperando para fechar. Esse número ainda é enorme, mas a alteração ainda reduzirá o uso de recursos de conexão.

    
por 24.01.2015 / 13:44
-1

Mesma pergunta aqui: link

É um problema de conexão maxima do windows. Alguns kb mudam a porta máxima efêmera ou adicionam memória: /

link

Eu vi esse problema no servidor físico com uptime muito grande (8 meses ou mais) e uma reinicialização resolveu o problema ...

    
por 22.01.2015 / 13:55