A veces el servidor OES de Linux no puede detectar un host de cliente que se ha desactivado de forma inesperada debido a un bloqueo de la estación de trabajo o un corte de alimentación. Sin embargo, la conexión está activa durante el tiempo límite de espera por defecto (de 12 a 15 minutos) antes de su desactivación. Si ha ajustado las conexiones simultáneas en 1, se recomienda finalizar la conexión manualmente o esperar el tiempo límite estimado antes de volver a entrar. Esta situación se produce cuando el proceso de vigilancia no consigue cerrar la conexión sin problemas. Por lo tanto, si las conexiones simultáneas se ajustan en 1 y la vigilancia no interrumpe la conexión, los usuarios no pueden entrar. El kernel de Linux proporciona tres parámetros para cambiar la forma en que keepalive investiga el trabajo del servidor. Utilice estos parámetros para implementar una solución en el nivel de TCP.
Estos parámetros están disponibles en el directorio /proc/sys/net/ipv4/ .
tcp_keepalive_time: determina la frecuencia de envío de paquetes keepalive de TCP para mantener activa una conexión, si no se está utilizando. Este valor se solo utiliza cuando keepalive está habilitado.
tcp_keepalive_time toma un valor entero en segundos. El valor por defecto es 2 horas o 7200 segundos. Este valor es adecuado para la mayoría de los hosts y no requiere demasiados recursos de red. Si ajusta este valor en un número demasiado bajo, sus recursos de red recibirán tráfico innecesario.
tcp_keepalive_probes: determina la frecuencia de envío de sondeos keepalive de TCP antes de decidir que una conexión está interrumpida.
tcp_keepalive_probes toma un valor entero; se recomienda que sea inferior a 50, según los valores de tcp_keepalive_time y tcp_keepalive_interval. El valor por defecto está ajustado en 9 sondeos antes de informar a la aplicación de la interrupción de la conexión.
tcp_keepalive_intvl: determina la duración de una respuesta para cada sondeo keepalive. Este valor es importante para calcular el tiempo antes de que la conexión sufra una muerte keepalive.
tcp_keepalive_intvl toma un valor entero; el valor por defecto es 75 segundos. Por lo tanto, 9 sondeos con 75 segundos tardarán aproximadamente 11 minutos en procesarse. Los valores por defecto de las variables tcp_keepalive_probes y tcp_keepalive_intvl se pueden utilizar para valorar el tiempo por defecto que tarda la conexión en caducar a causa de keepalive.
Modifique estos tres parámetros de forma que el cambio no genere mucho tráfico de red adicional pero solucione el problema. Una modificación de ejemplo podría ser la siguiente (con un tiempo de detección de 3 minutos):
tcp_keepalive_time set -120
tcp_keepalive_probes - 3
tcp_keepalive_intvl - 20
NOTA:Tenga cuidado con los ajustes de los parámetros y evite modificar los valores de las conexiones ya válidas.
Los ajustes tienen efecto inmediatamente después de que se modifiquen los archivos. No es necesario que reinicie los servicios. No obstante, los ajustes solo son válidos para la sesión actual. Una vez que se haya reiniciado el servidor, se recuperan los valores de configuración por defecto.
Para que la configuración sea permanente (incluso después de reiniciar el equipo), haga lo siguiente:
Añada las entradas siguientes en /etc/sysctl.conf.
net.ipv4.tcp_keepalive_time=120
net.ipv4.tcp_keepalive_probes=3
net.ipv4.tcp_keepalive_intvl=20
Solo se recomienda esta configuración si todos los clientes y servidores se conectan a través de LAN.