Aumentar o net.core.somaxconn fará a diferença?

27

Entrei em uma discussão no parâmetro net.core.somaxconn: me disseram que não faria diferença se alterarmos o padrão 128.

Eu acreditava que isso poderia ser prova suficiente:

"Se o argumento da lista de pendências for maior que o valor em / proc / sys / net / core / somaxconn, será silenciosamente truncado 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 o MySQL, LVS, apache2 (2.2), memcached.

petermolnar
fonte

Respostas:

43

A configuração net.core.somaxconnpara 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.somaxconnpara 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_overflowLinux).

listen(2)manual says - net.core.somaxconnage 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.somaxconnqualquer valor e limitamos a lista de pendências de aplicativos como, por exemplo, 10e definida net.ipv4.tcp_abort_on_overflowcomo 1.

PPS. As versões antigas do kernel do Linux têm um erro desagradável de truncar o somaxconvalor para 16 bits mais baixos (ou seja, converter o valor para uint16_t), portanto, aumentar esse valor para mais do que 65535pode 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 .

SaveTheRbtz
fonte
1
Também vale a pena notar: desde o Linux 5.4 foi aumentado para 4096 .
Hi-Angel