Wenn Sie lsof -i ausführen, werden in CLOSE_WAIT viele Verbindungen angezeigt. Sollte ich mir Sorgen machen?


7

Ich laufe also lsof -i | wc -lregelmäßig und es sagt mir, dass von 420 Leitungen zwischen 240 und 255 im CLOSE_WAITZustand sind. Wie treten TCP-Verbindungen in diesen Zustand ein?

Sollte ich mir Sorgen machen und wie sollte ich das Problem beheben?

Antworten:


12

(Ich wollte die Antwort von mikegrb bearbeiten, entschied aber, dass ich sie etwas zu viel schlachten würde)

CLOSE_WAIT bedeutet ziemlich genau das, was es sagt - der Kernel wartet darauf, dass der lokale Prozess seinen Dateideskriptor schließt, bevor er den Eintrag entfernt. Die TCP-Verbindung wurde vollständig abgebrochen und das andere Ende hat möglicherweise den Eindruck, dass die Verbindung endlich ist, aber Ihr Ende hält an den Dingen fest.

Die einzige Sorge ist, dass viele CLOSE_WAIT-Einträge Kernelspeicher- und Dateideskriptortabelleneinträge belegen, was ein Problem sein kann, wenn es große Stapel davon gibt. Wenn die Einträge, die Sie betrachten, vorübergehend sind, ist es wahrscheinlich nur so, dass Sie viel durchfahrenvon TCP-Verbindungen, und Sie sehen einen kleinen Bruchteil davon in der kurzen Zeit zwischen dem Schließen der Verbindung und dem Schließen des Dateideskriptors. Auf der anderen Seite, wenn sie permanent sind (die Ports und IP-Adressen ändern sich nicht im Laufe der Zeit), leckt etwas an Deskriptoren und es muss behoben werden, damit es immer seine FDS schließt, wenn es mit ihnen fertig ist. Wie Mikegrb sagte, hat eine neuere Version das Problem möglicherweise bereits behoben, sodass eine Frage auf der entsprechenden Mailingliste oder die Prüfung von Änderungsprotokollen wahrscheinlich gerechtfertigt ist.


Verbrauchen TCP-Verbindungen in CLOSE_WAIT Dateideskriptoren? Weil ich gestern ein Socket-Ausnahmeproblem "Zu viele offene Dateien" erhalten habe.
user20414

2
Ja, CLOSE_WAIT-Einträge sind offene Dateideskriptoren.
womble

2

Der Status CLOSE_WAIT bedeutet, dass das andere Ende ein FIN-Segment gesendet hat, um die Verbindung zu schließen. Die Verbindung ist immer noch hergestellt. Es befindet sich in einem Modus, den Sie sich als Halbduplex vorstellen können. Dadurch kann dieses Ende alle Puffer leeren und die letzten Datenbits an das Ende senden, um die Verbindung zu schließen, bevor die Verbindung von diesem Ende aus geschlossen wird.

Wenn in CLOSE_WAIT viele Verbindungen verbleiben, bedeutet dies, dass der verantwortliche Prozess den Socket nicht schließt, sobald er in CLOSE_WAIT eingeht. Sie können tcpdump oder andere Tools zur Erfassung des Netzwerkverkehrs verwenden, um die Pakete anzuzeigen.

Schauen Sie sich auch den verantwortlichen Prozess an. Was ist aus Neugier der verantwortliche Prozess? Möglicherweise ist eine neuere feste Version verfügbar, oder es ist Zeit, einen Fehlerbericht einzureichen.


Apache Tomcat 5.5.27
user20414

0

Wenn Sie in einem schwachen Netzwerk arbeiten, können Sie Folgendes einstellen:

  • Maximale Anzahl von Dateideskriptoren über ulimitsund über /proc(systemweit)
  • Sie können die TCP-Wartezeit über verkürzen /proc

0

Sie schließen wahrscheinlich keine Ressource (Dateihandle, Netzwerkverbindung) irgendwo in einer Anwendung, die auf dem Server ausgeführt wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.