Ich habe einen Port, der durch einen Prozess blockiert ist, den ich beenden musste. (Ein kleiner Telnet-Daemon, der abgestürzt ist). Der Prozess wurde erfolgreich beendet, aber der Port befindet sich noch im Status 'FIN_WAIT1'. Es kommt nicht davon, das Timeout dafür scheint auf 'ein Jahrzehnt' festgelegt zu sein.
Die einzige Möglichkeit, den Port freizugeben, besteht darin, den gesamten Computer neu zu starten, was natürlich etwas ist, das ich nicht tun möchte.
$ netstat -tulnap | grep FIN_WAIT1
tcp 0 13937 10.0.0.153:4000 10.0.2.46:2572 FIN_WAIT1 -
Weiß jemand, wie ich diesen Port ohne Neustart entsperren kann?
$whateveritwas
bevor sie überschrieben wird.Sie sollten das Timeout mit einstellen können
/proc/sys/net/ipv4/tcp_fin_timeout
.Es scheint wirklich keine Möglichkeit zu geben, den Sockel manuell zu löschen.
quelle
Es scheint, dass die Einstellung tcp_orphan_retries steuert, wie viele Versuche durchgeführt werden, bevor ein serverloser Port freigegeben wird. Hier war es 0, nachdem es auf 1 gesetzt wurde, waren die Ports verschwunden.
HTH
quelle
/proc/sys/net/ipv4/tcp_fin_timeout
ist die Zeitüberschreitung des Zustands FIN-WAIT-2, nicht FIN-WAIT-1. Sie sollten die tcpkill-Route wählen oder versuchen, mit den Keepalive-Zeiten unter/proc/sys/net/ipv4/tcp_keepalive_*
zu spielen, um einen Kill durch die SO zu erzwingen.quelle
Wenn Sie diese Schritte unter der Root-ID ausführen, wurde Folgendes für mich gelöscht:
Erfassen Sie die Kernel-Einstellung, um sie in einer Variablen zu ändern
Setzen Sie die maximale Anzahl der Waisenkinder vorübergehend auf 0
Stellen Sie sicher, dass der problematische Port nicht mehr verwendet wird
Warten Sie etwas und wiederholen Sie den obigen Schritt, bis der obige Befehl keine Zeilen mehr zurückgibt
Setzen Sie den Kernelparameter tcp_max_orphans auf den ursprünglichen Wert der obigen Variablen zurück
quelle
Wenn Ihre Anwendung die Seite der Verbindung geschlossen hat, wartet der Socket jetzt darauf, dass die Remote-Seite das Schließen bestätigt. Wenn Sie ein Problem damit haben, dass viele dieser Sockets in FIN_WAIT1 gespeichert sind, befolgen Sie die obigen Anweisungen von Manni.
quelle
Auf einem Linux-Kernel> = 4.9 können Sie den
ss
Befehl von iproute2 mit der Taste -K verwendenss -K dst 192.168.1.214 dport = 49029 Der Kernel muss mit aktivierter Option CONFIG_INET_DIAG_DESTROY kompiliert werden.
über /unix//a/511691/43898
quelle
Vielleicht würde tcpkill helfen? Mehr hier: http://www.cyberciti.biz/howto/question/linux/kill-tcp-connection-using-linux-netstat.php
quelle
das kann helfen:
quelle