FreeBSD Ouvir estouros de fila - não é possível aumentar o tamanho máximo da fila

2

Eu tenho um servidor FreeBSD Nginx com tráfego alto decente, e estou começando a obter um grande número de estouros de fila de escuta:

[root@svr ~]# netstat -sp tcp | fgrep listen
80361931 listen queue overflows
[root@svr ~]# netstat -Lan | grep "*.80"
tcp4  192/0/128        *.80
[root@svr ~]# sysctl kern.ipc.somaxconn
kern.ipc.somaxconn: 12288
[root@svr ~]#

No entanto, parece que não consigo aumentar o comprimento máximo da fila de espera para mais de 128. Eu aumentei o kern.ipc.somaxconn, mas não está mudando o tamanho máximo. Estou faltando alguma coisa?

Obrigado!

    
por Harry 29.10.2012 / 16:25

2 respostas

3

Pode ser uma fila de escuta limitada a 128 em configuração nginx

Veja a configuração do nginx para configurações como:

listen 80 backlog=128;

E remova o backlog (o padrão é -1 = use o limite do sistema) ou mude para um valor maior (8192 deve ser suficiente, mesmo para o servidor carregado). Se mesmo com o aumento da fila de escuta, você ainda pode ver excesso de fila de escuta, isso pode indicar que o nginx está bloqueado por um longo tempo (por causa do HDD lento / sobrecarregado ou por um módulo de terceiros mal escrito).

    
por 29.10.2012 / 21:40
2

O kern.ipc.somaxconn pode não fazer o que você acha que faz. É o limite para conexões pendentes e não manipuladas . (por exemplo, não é um limite de conexão, mas o limite de conexão de identificador pendente ).

Para usar uma analogia não relacionada ao computador: é o número máximo de telefones tocando (antes de serem atendidos e atendidos), não o número máximo de chamadas telefônicas simultâneas.

Se você tem um backlog tão grande, então é necessário deixar seu aplicativo atender o telefone com mais frequência (por exemplo, fornecer mais recursos, mais CPU, melhor estrutura, etc.).

Observe que a seção http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/configtuning-kernel-limits.html">FreeBSD manual sobre limites de kernel declara isso: (Ênfase minha ).

The kern.ipc.somaxconn sysctl variable limits the size of the listen queue for accepting new TCP connections. The default value of 128 is typically too low for robust handling of new connections in a heavily loaded web server environment. For such environments, it is recommended to increase this value to 1024 or higher. The service daemon may itself limit the listen queue size

Não tenho experiência com o Nginx, mas também verifico seus arquivos de configuração para o limite acima mencionado do lado do aplicativo.

    
por 29.10.2012 / 17:17