Soluzione 1:
# record what tcp_max_orphans's current value
original_value=$(cat /proc/sys/net/ipv4/tcp_max_orphans)
#set the tcp_max_orphans to 0 temporarily
echo 0 > /proc/sys/net/ipv4/tcp_max_orphans
# watch /var/log/messages
# it will split out "kernel: TCP: too many of orphaned sockets"
# it won't take long for the connections to be killed
# restore the value of tcp_max_orphans whatever it was before.
echo $original_value > /proc/sys/net/ipv4/tcp_max_orphans
# verify with
netstat -an|grep FIN_WAIT1
Soluzione 2:
Dovresti essere in grado di impostare il timeout con /proc/sys/net/ipv4/tcp_fin_timeout
.
Non sembra davvero esserci alcun modo per cancellare il socket manualmente.
Soluzione 3:
Sembra che l'impostazione tcp_orphan_retries controlli quanti tentativi verranno eseguiti prima che venga rilasciata una porta senza server. Era 0 qui, dopo averlo impostato su 1 le porte erano sparite.
HTH
Soluzione 4:
/proc/sys/net/ipv4/tcp_fin_timeout
è il timeout dello stato FIN-WAIT-2, non FIN-WAIT-1. Dovresti seguire il percorso tcpkill o puoi provare a giocare con i tempi keepalive sotto /proc/sys/net/ipv4/tcp_keepalive_*
per forzare un'uccisione da parte dell'SO.
Soluzione 5:
Eseguendo questi passaggi con l'ID root e per me è stato cancellato:
Cattura l'impostazione del kernel da modificare in una variabile
$ orig_orphans=$(sysctl -a|grep tcp_max_orph|cut -f3 -d' ')
Imposta temporaneamente il numero massimo di orfani su 0
$ sysctl -w net.ipv4.tcp_max_orphans=0
Controlla per assicurarti che la porta problematica non sia più in uso
$ netstat -np|grep 9716
Aspetta un po' e ripeti il passaggio precedente se necessario finché il comando precedente non restituisce alcuna riga
Reimposta il parametro del kernel tcp_max_orphans al valore originale dalla variabile precedente
$ sysctl -w net.ipv4.tcp_max_orphans=$orig_orphans