Windows 2008 Server SP2 64-Bit - TCP-Verbindungen werden nach TIME_WAIT nie mehr freigegeben

7

Wir haben ein Problem mit Windows 2008 Datacenter Edition SP2 64bit. Wir haben einen Prozess, der sehr häufig abfragt und neue TCP-Verbindungen herstellt. Das System befindet sich in einem Zustand, in dem mehr als 16.000 Verbindungen im Zustand TIME_WAIT vorliegen. Das Standardzeitlimit für das Betriebssystem beträgt 120 Sekunden. Danach sollten diese Verbindungen unterbrochen werden. Dies geschieht jedoch nie. Diese Verbindungen bleiben bestehen und werden auch nach langem Beenden des Ursprungsprozesses nie bereinigt (zwei Tage nach dem Abbruch des Prozesses befinden sich noch 16.000 Verbindungen). Das Betriebssystem soll sie auslaufen lassen, tut es aber nicht.

Hat jemand anderes dieses Verhalten gesehen und wenn ja, was wurde getan, um es zu beheben? Wir wissen, wie Sie den TCP-Stapel optimieren können, um das Timeout zu verkürzen oder mehr Verbindungen zuzulassen, aber dies ist hier nicht das Problem.

Vielen Dank!

Peco
quelle

Antworten:

5

Amazon EC2 hatte damit ein großes Problem. Sie haben kürzlich den Fehler behoben. Vielleicht trifft das gleiche Problem in Ihrer Situation zu?

Hallo, ich füge unten eine Erklärung ein, was dieses Problem verursacht hat. Die gute Nachricht ist, dass dies kürzlich von unserem Engineering-Team behoben wurde. Um das Problem zu beheben, müssen Sie lediglich die Windows Server 2008-Instanzen STOP / STARTEN, bei denen dieses Problem auftritt. Auch hier spreche ich nicht über REBOOT, was anders ist. STOP / START bewirkt, dass die Instanz auf einen anderen (fehlerfreien) Host verschoben wird. Wenn diese Instanzen erneut gestartet werden, werden sie auf Hosts ausgeführt, auf denen das Update installiert ist, sodass dieses Problem nicht erneut auftritt. Nachfolgend finden Sie die technische Erklärung zu diesem Problem. Nach einer eingehenden Untersuchung haben wir festgestellt, dass wir Windows 2008 x64 auf den meisten verfügbaren Instanztypen ausführen. Wir haben ein Problem festgestellt, das dazu führen kann, dass TCP-Verbindungen übermäßig lange in TIME_WAIT / CLOSE_WAIT verbleiben (in einigen Fällen auf unbestimmte Zeit in diesem Zustand). In diesen Zuständen bleiben die einzelnen Socket-Paare unbrauchbar und führen bei ausreichender Akkumulation zu einer Erschöpfung der Ports für die betreffenden Ports. In diesem Fall besteht die einzige Lösung zum Löschen der betreffenden Socket-Paare darin, die betreffende Instanz neu zu starten. Wir haben die Ursache für die Werte ermittelt, die von einer Zeitgeberfunktion in der Windows 2008-Kernel-API erzeugt werden, die auf vielen unserer 64-Bit-Plattformen gelegentlich einen Wert abruft, der in Zukunft extrem weit entfernt ist. Dies wirkt sich auf den TCP-Stapel aus, da die Zeitstempel auf den TCP-Socket-Paaren in Zukunft erheblich gestempelt werden. Laut Microsoft gibt es einen gespeicherten kumulativen Zähler, der nur aktualisiert wird, wenn der von diesem API-Aufruf erzeugte Wert größer als der kumulative Wert ist. Das Endergebnis ist, dass Sockets, die nach diesem Punkt erstellt wurden, in Zukunft alle zu weit gestempelt werden, bis diese zukünftige Zeit erreicht ist. In einigen Fällen haben wir diesen Wert mehrere hundert Tage in der Zukunft gesehen, daher scheinen die Socket-Paare für immer festzustecken.

GregB
quelle
1
Wow großartig! Wir haben das gleiche Problem auf EC2, danke für die Lösung!
Chris166
1

Es gibt einen Microsoft-Artikel , in dem einige Möglichkeiten zur Behebung dieses Problems beschrieben werden. Es kommt normalerweise von Anwendungen, die schlecht codiert sind und die Ports nicht richtig schließen. Sie müssen überprüfen, welche Anwendungen Sie installiert haben oder welche Aufgaben Sie ausführen, und diese deaktivieren, um festzustellen, welche das Problem verursachen.

Um das Problem zu beheben, möchten Sie entweder Folgendes betrachten:

  1. Erhöhen Sie den oberen Bereich der kurzlebigen Ports, die dynamisch Client-TCP / IP-Socket-Verbindungen zugewiesen werden.
  2. Reduzieren Sie das Zeitlimit für die TCP / IP-Socket-Verbindung des Clients von dem Standardwert von 240 Sekunden (eine dauerhaftere Korrektur).
Hyperperforator
quelle
2
Hyperperforator, das ist die übliche und wohlbekannte Manifestation dieses Problems. Das Problem, das Peco (und ich auch) hat, ist, dass einige time_wait-Verbindungen auch nach der time_wait-Verzögerung nie freigegeben werden. Schließlich gehen der Maschine die Ports aus, unabhängig davon, mit welcher Geschwindigkeit neue Verbindungen hergestellt werden.
0

Ich hatte das gleiche Problem mit Windows 2003 Server. Das Problem wurde behoben, als ich den Computer nach der Änderung der TCPIP-Parameter der Registrierung neu startete. Möglicherweise können Sie ihn in Server 2008 ausprobieren

swd
quelle
0

Ich habe festgestellt, dass dieses Problem unterschiedlich ist, wenn dieselbe VM (Windows 2008r2) entweder auf einem Intel- oder einem AMD Magny-Cours-VMware-Server bereitgestellt wird. Auf dem AMD bleiben die Verbindungen auf unbestimmte Zeit in TIME_WAIT, auf den Intel-Computern halten sie sich an das standardmäßige TIME_WAIT-Zeitlimit von 4 Minuten.

NielsK
quelle