Solution 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
Solution 2 :
Vous devriez pouvoir définir le délai d'attente avec /proc/sys/net/ipv4/tcp_fin_timeout
.
Il ne semble vraiment pas y avoir de moyen d'effacer le socket manuellement.
Solution 3 :
Il semble que le paramètre tcp_orphan_retries contrôle le nombre de tentatives à effectuer avant la libération d'un port sans serveur. C'était 0 ici, après l'avoir mis à 1, les ports avaient disparu.
HTH
Solution 4 :
/proc/sys/net/ipv4/tcp_fin_timeout
est le délai d'expiration de l'état FIN-WAIT-2, et non FIN-WAIT-1. Vous devriez aller avec la route tcpkill ou vous pouvez essayer de jouer avec les temps keepalive sous /proc/sys/net/ipv4/tcp_keepalive_*
pour forcer une mise à mort par le SO.
Solution 5 :
Exécutez ces étapes sous l'ID racine et cela a été effacé pour moi :
Capturez le paramètre du noyau à modifier dans une variable
$ orig_orphans=$(sysctl -a|grep tcp_max_orph|cut -f3 -d' ')
Définissez temporairement le nombre maximal d'orphelins sur 0
$ sysctl -w net.ipv4.tcp_max_orphans=0
Vérifiez que le port problématique n'est plus utilisé
$ netstat -np|grep 9716
Attendez un peu et répétez l'étape ci-dessus si nécessaire jusqu'à ce que la commande ci-dessus ne renvoie aucune ligne
Réinitialisez le paramètre du noyau tcp_max_orphans à la valeur d'origine de la variable ci-dessus
$ sysctl -w net.ipv4.tcp_max_orphans=$orig_orphans