¿El aumento de net.core.somaxconn hará la diferencia?

27

Me metí en una discusión sobre el parámetro net.core.somaxconn: me dijeron que no hará ninguna diferencia si cambiamos el valor predeterminado 128.

Creí que esto podría ser suficiente prueba:

"Si el argumento de la acumulación es mayor que el valor en / proc / sys / net / core / somaxconn, entonces se trunca silenciosamente a ese valor" http://linux.die.net/man/2/listen

pero no lo es.

¿Alguien sabe un método para testificar esto con dos máquinas, sentadas en una red Gbit? Lo mejor sería contra MySQL, LVS, apache2 (2.2), memcached.

petermolnar
fuente

Respuestas:

43

La configuración net.core.somaxconna valores más altos solo es necesaria en servidores con alta carga donde la nueva velocidad de conexión es tan alta / explosiva que tener 128 (50% más en BSD: 128 backlog+ 64 half-open) conexiones aún no aceptadas se considera normal. O cuando necesita delegar la definición de "normal" a las propias aplicaciones.

Algunos administradores usan alta net.core.somaxconnpara ocultar problemas con sus servicios, por lo que desde el punto de vista del usuario el proceso se verá como un pico de latencia en lugar de una conexión interrumpida / tiempo de espera (controlado por net.ipv4.tcp_abort_on_overflowLinux).

listen(2)el manual dice: net.core.somaxconnactúa solo el límite superior para una aplicación que es libre de elegir algo más pequeño (generalmente configurado en la configuración de la aplicación). Aunque algunas aplicaciones solo lo usan, lo listen(fd, -1)que significa establecer el trabajo acumulado en el valor máximo permitido por el sistema.

La causa real es una baja tasa de procesamiento (por ejemplo, un servidor de bloqueo de un solo subproceso) o un número insuficiente de subprocesos / procesos de trabajo (por ejemplo, software de bloqueo multiproceso / subproceso como apache/ tomcat)

PD. A veces es preferible fallar rápidamente y dejar que el equilibrador de carga haga su trabajo (reintentar) que hacer que el usuario espere; para ese propósito, establecemos net.core.somaxconncualquier valor y limitamos la acumulación de aplicaciones a, por ejemplo, 10y net.ipv4.tcp_abort_on_overflowa 1.

PPS Las versiones antiguas del kernel de Linux tienen un error desagradable de truncar el somaxconvalor en sus 16 bits más bajos (es decir, convertir el valor en uint16_t), por lo que elevar ese valor a más de lo que 65535puede ser peligroso. Para obtener más información, consulte: http://patchwork.ozlabs.org/patch/255460/

Si desea obtener más detalles sobre todas las partes internas de la cartera de pedidos en Linux, no dude en leer: Cómo funciona la cartera de TCP en Linux .

SaveTheRbtz
fuente
1
También vale la pena señalar: desde Linux 5.4 se aumentó a 4096 .
Hola Angel