Entrei em uma discussão no parâmetro net.core.somaxconn: me disseram que não fará diferença se alterarmos o padrão 128.
Eu acreditava que isso poderia ser prova suficiente:
"Se o argumento de backlog for maior que o valor em /proc/sys/net/core/somaxconn, ele será truncado silenciosamente para esse valor" http://linux.die.net/man/2/listen
Mas isso não.
Alguém conhece um método para testemunhar isso com duas máquinas, sentadas em uma rede Gbit? O melhor seria contra MySQL, LVS, apache2 ( 2.2 ), memcached.
A configuração
net.core.somaxconn
para valores mais altos é necessária apenas em servidores de alta carga, onde a taxa de nova conexão é tão alta/explosiva que ter 128 (50% a mais em BSD's: 128backlog
+ 64half-open
) conexões ainda não aceitas é considerado normal. Ou quando você precisa delegar a definição de "normal" para um aplicativo em si.Alguns administradores usam alto
net.core.somaxconn
para esconder problemas com seus serviços, então, do ponto de vista do usuário, o processo parecerá um pico de latência em vez de uma conexão interrompida/tempo limite (controlado pelonet.ipv4.tcp_abort_on_overflow
Linux).listen(2)
manual diz -net.core.somaxconn
atua apenas no limite superior de um aplicativo que é livre para escolher algo menor (geralmente definido na configuração do aplicativo). Embora alguns aplicativos apenas usemlisten(fd, -1)
o que significa definir o backlog para o valor máximo permitido pelo sistema.A causa real é baixa taxa de processamento (por exemplo, um único servidor de bloqueio de thread) ou número insuficiente de threads/processos de trabalho (por exemplo, software de bloqueio de multiprocesso/thread como
apache
/tomcat
)PS. Às vezes, é preferível falhar rapidamente e deixar o balanceador de carga fazer seu trabalho (repetir) do que fazer o usuário esperar - para esse propósito, definimos
net.core.somaxconn
qualquer valor e limitamos o backlog do aplicativo a, por exemplo10
, e definimosnet.ipv4.tcp_abort_on_overflow
como 1.PPS. Versões antigas do kernel Linux têm um bug desagradável de truncar
somaxcon
o valor para 16 bits mais baixos (ou seja, converter valor parauint16_t
), portanto, aumentar esse valor para mais do que65535
pode ser perigoso. Para obter mais informações, consulte: http://patchwork.ozlabs.org/patch/255460/Se você quiser entrar em mais detalhes sobre todas as pendências internas no Linux, sinta-se à vontade para ler: Como o TCP backlog funciona no Linux .