GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué limita el número máximo de conexiones en un servidor Linux?

Solución 1:

Finalmente encontré la configuración que realmente limitaba el número de conexiones:net.ipv4.netfilter.ip_conntrack_max . Esto se configuró en 11 776 y lo que sea que establezca es la cantidad de solicitudes que puedo atender en mi prueba antes de tener que esperar tcp_fin_timeout segundos para que haya más conexiones disponibles. El conntrack table es lo que usa el kernel para rastrear el estado de las conexiones, así que una vez que está lleno, el kernel comienza a descartar paquetes e imprimir esto en el registro:

Jun  2 20:39:14 XXXX-XXX kernel: ip_conntrack: table full, dropping packet.

El siguiente paso fue hacer que el kernel reciclara todas esas conexiones en el TIME_WAIT estado en lugar de descartar paquetes. Podría hacer que eso suceda activando tcp_tw_recycle o aumentando ip_conntrack_max ser mayor que el número de puertos locales disponibles para conexiones por ip_local_port_range . Supongo que una vez que el kernel está fuera de los puertos locales, comienza a reciclar las conexiones. Esto usa más conexiones de seguimiento de memoria, pero parece la mejor solución que activar tcp_tw_recycle ya que los documentos implican que eso es peligroso.

Con esta configuración puedo ejecutar ab todo el día y nunca quedarme sin conexiones:

net.ipv4.netfilter.ip_conntrack_max = 32768
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_max_orphans = 8192
net.ipv4.ip_local_port_range = 32768    61000

El tcp_max_orphans la configuración no tuvo ningún efecto en mis pruebas y no sé por qué. Creo que cerraría las conexiones en TIME_WAIT estado una vez que había 8192 de ellos pero no hace eso para mí.

Solución 2:

Realmente desea ver lo que el sistema de archivos /proc tiene para ofrecerle a este respecto.

  • Guía de ajuste de TCP del Departamento de Energía de EE. UU.
  • Parámetros de ajuste de TCP para diferentes sistemas operativos
  • "Administrar Linux sobre la marcha" de IBM
  • Documentación en LinuxInsight.com frente a /proc/sys/net/ipv4

En esa última página, puede encontrar lo siguiente que le interese:

  • /proc/sys/net/ipv4/tcp_max_orphans, que controla el número máximo de sockets que tiene el sistema no unido a algo. Aumentar esto puede consumir hasta 64 kbytes de memoria no intercambiable por socket huérfano .
  • /proc/sys/net/ipv4/tcp_orphan_retries, que controla la cantidad de reintentos antes de que un socket quede huérfano y cerrado. Hay una nota específica en esa página sobre servidores web que es de su interés directo...

Solución 3:

No creo que haya un sintonizable para configurar eso directamente. Esto entra en la categoría de ajuste de TCP/IP. Para averiguar qué puede sintonizar, pruebe 'man 7 tcp'. El sysctl ('man 8 sysctl') se usa para configurarlos. 'sysctl-a | grep tcp' le mostrará la mayor parte de lo que puede ajustar, pero no estoy seguro de si lo mostrará todo. Además, a menos que esto haya cambiado, los sockets TCP/IP se abren como descriptores de archivos. Así que esta y la siguiente sección en ese enlace podrían ser lo que está buscando.

Solución 4:

Intente configurar lo siguiente y configurar tcp_fin_timeout. Esto debería cerrar TIME_WAIT más rápido.

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

Solución 5:

El stock apache(1) solía venir predefinido para admitir solo 250 conexiones simultáneas; si quería más, había un archivo de encabezado para modificar para permitir más sesiones simultáneas. No sé si esto sigue siendo cierto con Apache 2.

Además, debe agregar una opción para permitir muchos más descriptores de archivos abiertos para la cuenta que ejecuta Apache, algo que los comentarios anteriores no señalan.

Preste atención a la configuración de su trabajador y qué tipo de tiempos de espera de mantenimiento de actividad tiene dentro de Apache, cuántos servidores de repuesto tiene ejecutándose a la vez y qué tan rápido se están eliminando estos procesos adicionales.


Linux
  1. ¿Qué hace que Linux sea el sistema operativo sostenible?

  2. ¿Qué es el número de inodo en Linux?

  3. ¿Cuál es el nivel de ejecución actual del sistema Linux?

  4. ¿Cuál es el tamaño máximo de un valor de variable de entorno de Linux?

  5. ¿Cuál es el equivalente de Active Directory en Linux?

¿Qué es el comando Watch de Linux + ejemplos?

¿Qué es el Shell en Linux?

Migración de Unix a Linux

¿Qué es el comando matar en Linux?

¿Cómo determinar qué está utilizando la mayor cantidad de espacio en disco en un servidor Linux?

¿Cuál es el número máximo de puertos?