Può accadere che un server Linux OES non riesca a rilevare un host client che è stato arrestato bruscamente a causa del crash di una workstation o di un'interruzione dell'alimentazione. Tuttavia, la connessione rimane attiva per il timeout di default (da 12 a 15 minuti circa) per poi essere annullata. Se le connessioni simultanee sono state impostate su 1, prima di eseguire nuovamente il login si consiglia di terminare la connessione manualmente o di attendere il timeout previsto. Questa situazione si verifica quando il processo watchdog non riesce a terminare la connessione come dovrebbe. Pertanto, se le connessioni simultanee sono impostate su 1 e la connessione non viene annullata dal processo watchdog, gli utenti non possono eseguire il login. Nel kernel di Linux sono disponibili tre parametri per modificare la modalità in cui le probe keepalive agiscono sul lato server. Utilizzarli per implementare una soluzione alternativa a livello di TCP.
I parametri sono disponibili nella directory /proc/sys/net/ipv4/ .
tcp_keepalive_time: determina la frequenza di invio dei pacchetti TCP keepalive per mantenere attiva una connessione quando non è in uso. Questo valore viene utilizzato solo quando la probe keepalive è abilitata.
Il parametro tcp_keepalive_time accetta valori interi in secondi. Il valore di default è 2 ore o 7.200 secondi. e risulta adeguato per la maggior parte degli host, senza comportare un utilizzo eccessivo delle risorse di rete. Se si imposta un valore troppo basso, le risorse di rete vengono utilizzate per gestire un traffico non necessario.
tcp_keepalive_probes: determina la frequenza di invio delle probe TCP keepalive prima che una connessione venga considerata interrotta.
Il parametro tcp_keepalive_probes accetta valori interi; si consiglia un valore inferiore a 50, a seconda delle impostazioni di tcp_keepalive_time e tcp_keepalive_interval. Il valore di default è di 9 probe prima che l'applicazione venga informata dell'interruzione della connessione.
tcp_keepalive_intvl: determina la durata di una risposta per ciascuna probe keepalive. Questo valore è importante ai fini del calcolo del tempo dopo il quale la probe keepalive non è più attiva.
Il parametro tcp_keepalive_intvl accetta valori interi e il valore di default è di 75 secondi. Ne deriva che 9 probe con un intervallo di 75 secondi ciascuna richiedono circa 11 minuti. I valori di default delle variabili tcp_keepalive_probes e tcp_keepalive_intvl possono essere utilizzati per valutare il tempo di default dopo il quale viene generato un timeout della connessione a causa della probe keepalive.
Modificare questi tre parametri in modo che non venga generato un eccessivo traffico di rete aggiuntivo e che il problema sia comunque risolto. Di seguito è riportata una modifica esemplificativa (tempo di rilevamento di 3 minuti):
tcp_keepalive_time set -120
tcp_keepalive_probes - 3
tcp_keepalive_intvl - 20
NOTA:utilizzare questo parametro con cautela evitando di impostare connessioni che sono già valide.
Le impostazioni vengono applicate subito dopo la modifica dei file. e non è necessario riavviare alcun servizio. Tuttavia, le impostazioni sono valide solo per la sessione attuale. Una volta riavviato il server, vengono ripristinate ai valori di default.
Per rendere permanente l'impostazione (anche dopo il riavvio), effettuare le operazioni seguenti:
Aggiungere le voci seguenti a /etc/sysctl.conf.
net.ipv4.tcp_keepalive_time=120
net.ipv4.tcp_keepalive_probes=3
net.ipv4.tcp_keepalive_intvl=20
Si consiglia di utilizzare queste impostazioni soltanto se tutti i client e i server sono connessi a una LAN.