Windows Server 2012 R2 verfügt nicht über kurzlebige Ports, sollte dies jedoch nicht

13

Wir haben regelmäßig seltsame Probleme mit dem Netzwerk auf unserem dedizierten Server. Es läuft Windows Server 2012 R2 x64 auf Xeon E5620 mit 16 GB RAM und Intel 82575EB Netzwerkadapter.

Bitte beachten Sie, dass wir bereits abgestimmt HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\ParametersSchlüsselwerte TcpTimedWaitDelayund MaxUserPortbis 30 und 65530 ist.

Zu einem zufälligen Zeitpunkt reagieren unsere Websites nicht mehr. Der Grund dafür ist, dass sie keine Verbindung zu einer lokalen Datenbank herstellen können. Es ist ungefähr 2 Wochen Betriebszeit, wenn diese Probleme auftreten. Das Systemprotokoll erhält die TCPIP-Warnungen 4227 und 4231. Es heißt "Eine Anforderung zum Zuweisen einer kurzlebigen Portnummer aus dem globalen TCP-Portbereich ist fehlgeschlagen, da alle diese Ports verwendet werden."

Wenn ich renne

Get-Counter -Counter \TCPv4\*

oder

Get-Counter -Counter \TCPv6\*

oder

netstat -abn | find /c ":"

Ich bekomme immer einen vernünftigen Wert von 500-1500 Verbindungen, was nicht einmal nahe an der 65K-Grenze liegt.

Außerdem wird "localhost" lokal nicht mehr in :: 1 aufgelöst und auf 127.0.0.1 zurückgesetzt.
Nur ein erzwungener Neustart des Computers kann die Situation beheben.

Könnte es sich um ein Netzwerkadapterproblem handeln?

UPDATE 1

Es passierte erneut und schien behoben zu sein, als ich den Mailserver neu startete. Seltsamerweise zeigten alle Zähler ~ 1000 Verbindungen, wobei ~ 500 im Moment aktiv sind, und immer noch den 10055-Socket-Fehler beim Versuch, eine Verbindung zur Datenbank herzustellen, die nichts mit dem Mailserver zu tun hat.

UPDATE 2 Das ist seltsam, aber der tägliche Neustart der Mail-Dienste behebt das Problem vollständig.

CamaroSS
quelle
1
Ich hatte ein ähnliches Problem und der folgende Link hat es für mich behoben: http://blogs.technet.com/b/kimberj/archive/2012/07/06/sever-quot-hangs-quot-and-ephemeral-port- erschöpfungsprobleme.aspx
2
Über UPDATE 2. Dies zeigt also einfach an, dass Mail-Dienste zu viele Verbindungen generieren, ohne sie zu schließen, und Sie das Problem nicht gelöst haben, sondern es nur ausblenden, bis es schlimmer wird und 2 Neustarts pro Tag einige Zeit erforderlich sind ... Sieht eher nach Ausblenden als nach Lösen aus Problem ...
Mikhail

Antworten:

9

Ich hatte fast 1 Monat lang ein ähnliches Problem mit einem erschöpften Pool von TCP / IP-Ports unter WinSvr 2012R2 x64, bei dem der Server keine neuen und TCP-Verbindungen mehr empfing. Also habe ich mit Registrierungswerten gespielt und diese sind für mich stabil:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:0000fffe
"TcpNumConnections"=dword:00fffffe
"TcpMaxDataRetransmissions"=dword:00000005
  • TcpTimedWaitDelay - 30
  • MaxUserPort - 65534
  • TcpNumConnections - sollte sich im Standardzustand auf maximal = 16777214 befinden und verhindern, dass der Server kurzlebige Ports erschöpft.
  • TcpMaxDataRetransmissions - Zeitlimit für die erneute Übertragung von nicht bestätigten TCP-Datensegmenten bei tatsächlicher Verbindung = 5.

Im Ergebnis das gleiche wie bei Ihnen. Ich denke, Sie sollten in Betracht ziehen, Ihr Verhalten in Bezug auf die Leistung Ihrer Anwendungen / Skripte zu überprüfen. Wenn alles in Ordnung ist und nichts hilft, können Sie versuchen, den Proxyserver vor Ihren Webanwendungsserver zu stellen, zwei Knoten mit dem Webserver (IIS, Apache, ...) zu erstellen, die denselben statischen Inhalt gemeinsam nutzen und gleichzeitig auf dieselbe Datenbank zugreifen Zeit (wenn Sie genügend Ressourcen in Ihrem Unternehmen haben).

Vielleicht würde Ihnen dieser Artikel irgendwie helfen: http://blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it- s-wichtig.aspx

MyKE
quelle
1
Sie sollten die Frage gründlich gelesen haben, bevor Sie sie beantworten. Natürlich habe ich diese Lösung ausprobiert, bevor ich gefragt habe, sie ist sehr verbreitet. Ich habe das Problem bereits auf andere Weise gelöst.
CamaroSS
1
Ich denke, der tägliche Neustart der Mail-Dienste ist kein gelöstes Problem. Haben Sie eine andere Lösung gefunden?
MyKE
3
@CamaroSS: Bitte teilen Sie Ihre Lösung mit (wenn dies über das "Neustarten des Mail-Dienstes" hinausgeht - dies ist keine Lösung). Vielleicht sollten Sie es auch ein bisschen mehr schätzen, wenn jemand versucht, Ihnen zu helfen.
Sven
@ CamaroSS Und wenn Sie meine Antwort sorgfältig lesen, sehen Sie "Im Ergebnis das gleiche wie Ihres", dann habe ich eine andere Information gepostet ..
MyKE
1
Funktioniert die Einstellung MaxUserPort2012 noch? Ich dachte im Jahr 2012 müssen Sie es über Netsh tun. zB:netsh int ipv4 set dynamicport tcp start=25535 num=40000
Rustyx
4

Zusätzlich zu den Tcpip-Treibereinstellungen wird der kurzlebige TCP-Portbereich in Windows Server mit dem Befehl netsh ( Quelle ) verwaltet.

Sie können den dynamischen Portbereich mit den folgenden Befehlen anzeigen :

  • netsh int ipv4 show dynamicport tcp
  • netsh int ipv4 show dynamicport udp
  • netsh int ipv6 show dynamicport tcp
  • netsh int ipv6 show dynamicport udp

Verwenden Sie diesen Befehl, um den Portbereich zu ändern :

  • netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range

Beispielsweise:

netsh int ipv4 set dynamicport tcp start=49152 num=16384

Die Einstellung (start = 49152 num = 16384 ) ist auch unter Windows Server 2008 die Standardeinstellung .

Rustyx
quelle
Vielen Dank dafür - ich habe bereits stundenlang versucht, mein Problem zu lösen. Alles, was ich finden konnte, war, MaxUserPort in der Registrierung anzupassen, und niemand erwähnte netsh.
Milosz
3

Hatte das gleiche Problem unter Windows Server 2016 , auf dem große Mengen von Selenium-Tests mit Chromewebdriver ausgeführt wurden. Dieses PS-Skript konfiguriert automatisch die oben freigegebenen Einstellungen @Myke. Der shutdownBefehl wurde hinzugefügt, da für die Änderungen des TCP-Stacks ein Neustart erforderlich ist.

Erhöhen Sie die Poolgröße für kurzlebige TCP-Ports

Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name MaxUserPort -Value 65534 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpTimedWaitDelay -Value 30 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpNumConnections -Value 16777214 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpMaxDataRetransmissions -Value 5 -Force | Out-Null

shutdown -r -t 0

Dies war die Fehlermeldung, die wir erhielten Webdriver.Quit(), als uns mitgeteilt wurde, dass eine TCP-Adresse verwendet wurde.

Fehler : EADDRINUSE verbindet EADDRINUSE 127.0.0.1:12843 bei ClientRequest. (\ node_modules \ selenium-webdriver \ http \ index.js: 238: 15)
Von : Aufgabe: WebDriver.quit ()

SliverNinja - MSFT
quelle
1

Haben Sie sichergestellt, dass keine Datenbankverbindungsobjekte verloren gehen? Sie müssen jede geöffnete Datenbankverbindung entweder explizit (mit try-finally) oder mit einem using {} -Block schließen. Dies ist ein häufiges Problem, über das ASP Sie nicht direkt informiert.

James
quelle
Es handelt sich um eine Reihe von PHP-Sites, von denen die meisten über FastCGI mit einer dauerhaften Verbindung ausgeführt werden. Dies sollte also nicht der Fall sein. Wenn dies der Fall wäre, würden die Systemzähler weitaus höhere Werte zurückgeben. Ich kann auch nicht erklären, warum localhost plötzlich aufhört, sich in :: 1 aufzulösen, und stattdessen in 127.0.0.1 auflöst.
CamaroSS
2
:: 1 Das Verschwinden ist wahrscheinlich nur ein Nebeneffekt des Überlaufens der zulässigen Ports. Ich vermute, dass Windows einen IPv6-Ping versucht und wenn es keinen Port für den Versuch erhält, fällt es auf IPv4 zurück. PHP liegt außerhalb meiner Fachgebiete. :-(. Viel Glück!
James