A configuração net.core.somaxconn
para valores mais altos é necessária apenas em servidores de alta carga, onde a nova taxa de conexão é tão alta / rajada que ter 128 (50% a mais nos BSD's: 128 backlog
+ 64 half-open
) conexões ainda não aceitas é considerado normal. Ou quando você precisar delegar a definição de "normal" a um aplicativo em si.
Alguns administradores usam alto net.core.somaxconn
para ocultar problemas com seus serviços; portanto, do processo do ponto de vista do usuário, parecerá um pico de latência, em vez de uma conexão interrompida / tempo limite (controlado pelo net.ipv4.tcp_abort_on_overflow
Linux).
listen(2)
manual says - net.core.somaxconn
age apenas no limite superior de um aplicativo que pode escolher algo menor (geralmente definido na configuração do aplicativo). Embora alguns aplicativos usem apenas, o listen(fd, -1)
que significa definir backlog para o valor máximo permitido pelo sistema.
A causa real é a baixa taxa de processamento (por exemplo, um único servidor de bloqueio encadeado) ou o número insuficiente de processos / encadeamentos de trabalho (por exemplo, software multiprocesso / bloqueio por encadeamento como apache
/ tomcat
)
PS. Às vezes, é preferível falhar rapidamente e deixar que o balanceador de carga faça seu trabalho (tente novamente) do que fazer o usuário esperar - para esse fim, definimos net.core.somaxconn
qualquer valor e limitamos a lista de pendências de aplicativos como, por exemplo, 10
e definida net.ipv4.tcp_abort_on_overflow
como 1.
PPS. As versões antigas do kernel do Linux têm um erro desagradável de truncar o somaxcon
valor para 16 bits mais baixos (ou seja, converter o valor para uint16_t
), portanto, aumentar esse valor para mais do que 65535
pode até ser perigoso. Para mais informações, consulte: http://patchwork.ozlabs.org/patch/255460/
Se você quiser entrar em mais detalhes sobre todos os internos do backlog no Linux, sinta-se à vontade para ler:
Como o backlog do TCP funciona no Linux .