Il arrive parfois que le serveur OES Linux ne parvienne pas à détecter un hôte client qui s'est terminé brusquement en raison d'une défaillance du poste de travail ou d'une panne de courant. Toutefois, la connexion reste active pendant le timeout par défaut (environ 12 à 15 minutes) avant la désactivation de la connexion. Si vous avez défini les connexions simultanées sur 1, il est recommandé de mettre fin à la connexion manuellement ou de patienter pendant toute la durée du timeout avant d'établir une nouvelle connexion. Cette situation se produit lorsque le processus Watchdog ne parvient pas à terminer la connexion correctement. Par conséquent, si les connexions simultanées sont définies sur 1 et que la connexion n'est pas arrêtée par le processus Watchdog, les utilisateurs ne peuvent pas se connecter. Le noyau Linux fournit trois paramètres qui permettent de modifier le mode de fonctionnement des sondes keepalive du côté serveur. Utilisez ces paramètres pour mettre en œuvre une solution de contournement au niveau TCP.
Ces paramètres sont disponibles dans le répertoire /proc/sys/net/ipv4/.
tcp_keepalive_time : détermine la fréquence d'envoi des paquets TCP keepalive afin de maintenir la connexion si elle n'est pas utilisée actuellement. Cette valeur n'est utilisée que lorsque le paramètre keepalive est activé.
Le paramètre tcp_keepalive_time utilise une valeur d'entier en secondes. La valeur par défaut est de 7 200 secondes, soit 2 heures. Ce processus convient à la plupart des hôtes et ne nécessite pas de nombreuses ressources réseau. Si vous définissez ce paramètre sur une valeur faible, il utilise des ressources réseau pour un trafic inutile.
tcp_keepalive_probes : détermine la fréquence d'envoi des sondes TCP keepalive avant qu'une connexion soit considérée comme étant interrompue.
Le paramètre tcp_keepalive_probes utilise une valeur d'entier inférieure à 50 (recommandation), en fonction des valeurs tcp_keepalive_time et tcp_keepalive_interval. La valeur par défaut consiste à définir 9 sondes avant que l'application soit informée de l'interruption de la connexion.
tcp_keepalive_intvl : détermine la durée de réponse pour chaque sonde keepalive. Cette valeur est importante pour calculer la durée qui doit s'écouler avant que la sonde keepalive considère la connexion comme terminée.
Le paramètre tcp_keepalive_intvl utilise une valeur d'entier, la valeur par défaut étant de 75 secondes. Par conséquent, le processus global incluant 9 sondes de 75 secondes prend environ 11 minutes. Les valeurs par défaut des variables tcp_keepalive_probes et tcp_keepalive_intvl permettent d'évaluer la durée par défaut avant que la connexion soit considérée comme ayant abouti à un timeout en raison des sondes keepalive.
Modifiez ces trois paramètres de manière à ce qu'ils résolvent le problème sans pour autant générer de grandes quantités de trafic supplémentaire. Par exemple, vous pouvez effectuer la modification suivante (avec une durée de détection de 3 minutes) :
tcp_keepalive_time set -120
tcp_keepalive_probes - 3
tcp_keepalive_intvl - 20
REMARQUE :Soyez prudent lorsque vous modifiez les valeurs de ces paramètres et évitez de choisir des connexions déjà valides.
Les paramètres prennent effet dès que les fichiers sont modifiés. Vous devez redémarrer tous les services. Toutefois, les paramètres ne sont valides que pour la session en cours. Une fois que le serveur est redémarré, les paramètres reprennent leur valeur par défaut.
Pour que le paramétrage soit permanent (même après un redémarrage), effectuez les opérations suivantes :
Ajoutez les entrées suivantes dans /etc/sysctl.conf.
net.ipv4.tcp_keepalive_time=120
net.ipv4.tcp_keepalive_probes=3
net.ipv4.tcp_keepalive_intvl=20
Nous vous recommandons d'utiliser ces paramètres que si tous les clients et serveurs sont connectés par l'intermédiaire d'un réseau local.