Cómo mejorar la capacidad de carga de conexiones cortas de los sistemas Linux
Puedes usar el siguiente comando para ver:
netstat -ant| grep -i time_wait
A veces, el número puede ser muy sorprendente:
netstat -ant|grep -i time_wait |wc -l
puede exceder 30.000-40.000. En este momento, necesitamos modificar el tiempo de espera TCP del kernel de Linux para acortarlo. Hay un parámetro sysctl que parece ser muy útil: /proc/sys/net/ipv4/tcp_fin_timeout. , que es de 60 segundos. Mucha información en línea dice que establecer este valor más bajo puede reducir el estado TIME_WAIT en netstat. Mucha información en línea dice que establecer este valor más bajo puede reducir el estado TIME_WAIT en netstat, pero esta afirmación es incorrecta. Después de leer detenidamente el código fuente del kernel de Linux, descubrimos que este valor en realidad se genera después de la modificación, en realidad no se vuelve a leer en el kernel para su uso. En realidad, hay una definición de macro en el kernel, que está en $KERNEL/include. /net/tcp.h , con las siguientes líneas:
#define TCP_TIMEWAIT_LEN (TIME_WAIT_LEN (TIME_WAIT))TIMEWAIT_LEN (60*HZ) /* Cuánto tiempo esperar para destruir el estado TIME-WAIT *, aproximadamente 60 segundos*/
Esta macro en realidad controla el tiempo de espera del estado TCP TIME_WAIT. Si queremos reducir el número de estados TIME_WAIT (ahorrando así algo de tiempo del kernel), entonces podemos establecer un valor más bajo; según nuestras pruebas, 10 segundos es más adecuado, es decir, cambiar lo anterior a p>
#define TCP_TIMEWAIT_LEN (10*HZ) /* Cuánto tiempo esperar para destruir el estado TIME-WAIT *, aproximadamente 60 segundos*/
Luego vuelva a compilar el kernel y reinicie el sistema, encontrará que el short El estado TIME_WAIT causado por la conexión se reduce considerablemente:
netstat -ant | grep -i time_wait |wc -l
Esto generalmente se reduce en al menos 2/3 y lo hará. mejorar el tiempo de procesamiento del sistema.