Frage Wie entferne ich Sockets im Zustand FIN_WAIT1?


Ich habe einen Port, der von einem Prozess blockiert wird, den ich töten musste. (ein kleiner Telnet-Daemon, der abgestürzt ist). Der Prozess wurde erfolgreich beendet, der Port befindet sich jedoch immer noch im Status 'FIN_WAIT1'. Es kommt nicht heraus, die Auszeit dafür scheint auf 'ein Jahrzehnt' gesetzt zu sein.

Der einzige Weg, den ich gefunden habe, um den Port freizugeben, besteht darin, den gesamten Rechner neu zu starten, was natürlich nicht der Fall ist.

$ 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?


18
2018-05-13 08:40


Ursprung




Antworten:


# 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

14
2017-10-15 14:54



es würde die Antwort verbessern, um sich zuerst Notizen zu machen $whateveritwas bevor es überschrieben wird. - haventchecked


Sie sollten das Timeout mit einstellen können /proc/sys/net/ipv4/tcp_fin_timeout.

Es scheint wirklich keine Möglichkeit zu geben, den Socket manuell zu löschen.


7
2018-05-13 09:32



Diese Antwort ist nicht korrekt. tcp_orphan_retries beeinflusst FIN_WAIT1, tcp_fin_timeout beeinflusst FIN_WAIT2. - suprjami
suprjami ist korrekt, tcp_fin_timeout wirkt sich auf FIN_WAIT2 aus. Was nur bei Verwendung von SO_LINGER ausgelöst wird. - Matt
@innaM Kannst du bitte diese Antwort entfernen? Es ist nicht korrekt und Anhäufungen von Downvotes. Ich sehe, dass Sie immer noch aktiv sind, daher scheint es am sinnvollsten zu sein, die Antwort zu entfernen. - Andrew B
@Andrew B: Es scheint, dass es nicht möglich ist, akzeptierte Antworten zu löschen. - innaM


Es scheint, dass die Einstellung tcp_orphan_retries steuert, wie viele Versuche unternommen werden, bevor ein serverloser Port freigegeben wird. Es war 0 hier, nachdem es auf 1 gesetzt wurde, waren die Ports weg.

HTH


6
2017-12-28 11:35



Eng verwandt: 0 ist ein Standardwert, der 8 bedeutet. serverfault.com/a/408882/152073 - Andrew B


/proc/sys/net/ipv4/tcp_fin_timeout ist das Timeout des FIN-WAIT-2-Status, nicht FIN-WAIT-1. Du solltest mit der tcpkill Route gehen oder du kannst versuchen mit den Keepalive Zeiten unter zu spielen /proc/sys/net/ipv4/tcp_keepalive_* eine Tötung durch die SO erzwingen.


4
2017-10-14 14:15





Führen diese Schritte unter Root-ID und es für mich gelöscht:

Erfassen Sie die Kerneleinstellung, um sie in einer Variablen zu ändern

$ orig_orphans=$(sysctl -a|grep tcp_max_orph|cut -f3 -d' ')

Setzen Sie die maximalen Waisen vorübergehend auf 0

$ sysctl -w net.ipv4.tcp_max_orphans=0

Überprüfen Sie, ob der problematische Port nicht mehr verwendet wird

$ netstat -np|grep 9716

Warten Sie ein wenig und wiederholen Sie den obigen Schritt, bis der obige Befehl keine Zeilen zurückgibt

Setzen Sie den Kernel-Parameter tcp_max_orphans auf den ursprünglichen Wert von der obigen Variablen zurück

$ sysctl -w net.ipv4.tcp_max_orphans=$orig_orphans

2
2017-07-22 22:46



Hallo, Willkommen bei Serverfault. Ich habe Ihren Beitrag bearbeitet, um die Formatierung Ihrer Antwort mit anderen Antworten auf dieser Website besser zu vereinbaren. Für Ihre nächste Antwort verwenden Sie bitte nicht so viele Titel wie hier und überlegen, andere Antworten als Vorlage für Ihre eigenen Antworten zu verwenden. Danke für deinen Beitrag. Viel Spaß beim Fahren mit Serverfault. - Richard


FIN_WAIT1

Die Anwendung auf dem lokalen Rechner hat   schloss die Verbindung. Zeichen der   Dies wurde an die Fernbedienung gesendet   Maschine.

Ihre Anwendung hat die Seite der Verbindung geschlossen. Der Socket wartet nun darauf, dass die Remote-Seite das Schließen bestätigt. Wenn Sie ein Problem mit vielen Sockets haben, in denen sie sich befinden FIN_WAIT1 dann solltest du dem oben genannten Rat von Manni folgen.


1
2018-05-13 11:15





Vielleicht würde Tcpkill helfen? Mehr hier: http://www.cyberciti.biz/howto/question/linux/kill-tcp-connection-using-linux-netstat.php


-1
2018-05-13 10:18





das kann helfen:

net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_retries2 = 2
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_reordering = 5
net.ipv4.tcp_retrans_collapse = 0

-4
2018-03-23 06:01



Es kann helfen, wenn Sie erklären, was das alles ist. Wir sind Profis, und so fügen wir nicht blind Dinge rein und hoffen, dass es hilft. - Michael Hampton♦