Lösung 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
Lösung 2:
Sie sollten das Timeout mit /proc/sys/net/ipv4/tcp_fin_timeout
einstellen können .
Es scheint wirklich keine Möglichkeit zu geben, den Socket manuell zu löschen.
Lösung 3:
Es scheint, dass die Einstellung tcp_orphan_retries steuert, wie viele Versuche unternommen werden, bevor ein serverloser Port freigegeben wird. Hier war es 0, nach dem Setzen auf 1 waren die Ports weg.
HTH
Lösung 4:
/proc/sys/net/ipv4/tcp_fin_timeout
ist die Zeitüberschreitung des Zustands FIN-WAIT-2, nicht FIN-WAIT-1. Sie sollten mit der tcpkill-Route gehen oder Sie können versuchen, mit den Keepalive-Zeiten unter /proc/sys/net/ipv4/tcp_keepalive_*
zu spielen um einen Kill durch die SO zu erzwingen.
Lösung 5:
Führen Sie diese Schritte unter Root-ID aus und es wurde für mich gelöscht:
Erfassen Sie die zu ändernde Kerneleinstellung in einer Variablen
$ orig_orphans=$(sysctl -a|grep tcp_max_orph|cut -f3 -d' ')
Setze die max. Waisenkinder vorübergehend auf 0
$ sysctl -w net.ipv4.tcp_max_orphans=0
Stellen Sie sicher, dass der problematische Port nicht mehr verwendet wird
$ netstat -np|grep 9716
Warten Sie etwas und wiederholen Sie den obigen Schritt bei Bedarf, bis der obige Befehl keine Zeilen zurückgibt
Setzen Sie den Kernelparameter tcp_max_orphans auf den ursprünglichen Wert aus der obigen Variablen zurück
$ sysctl -w net.ipv4.tcp_max_orphans=$orig_orphans