Einstellung der TCP-Keepalive-Zeit für Windows-Server
Über das TCP-Protokoll von TCP/IP können zuverlässige, verbindungsorientierte Netzwerkverbindungen zwischen einem Client und einem Server aufgebaut werden (eine solche Verbindung stellt z. B. jede Firebird-Session dar.)
Normalerweise wird beim Beenden des Clients die Verbindung ordentlich getrennt. Dadurch kann der Server die Verbindung auch auf seiner Seite beenden und die benötigten Ressourcen freigeben.
Bei einer schlagartigen Trennung der Verbindung (z. B. Client-Rechner wird plötzlich stromlos, Ausfall eines Netzwerk-Routers, Client-Programm wird per Task-Manager "abgeschossen") bekommt der Server die Trennung der Verbindung nicht automatisch mitgeteilt. Die Verbindung ist "halb offen". Der Server würde dies erst bemerken, wenn er etwas in diese halb offene Verbinung sendet, was ein Server aber normalerweise nicht tut.
Der Server sendet regelmäßig sog. "Keepalive"-Nachrichten aus. Diese werden vom Client bestätigt, ohne dass dafür Nutzdaten übertragen werden. Wenn der Client nicht antwortet, betrachtet der Server die Verbindung als halb-offen und schließt sie.
Das Intervall, in dem solche Keepalive-Nachrichten versendet werden ist bei Windows standardmäßig auf 2 Stunden eingestellt. Es kann also sehr lange dauern bis eine halb-offene Verbindung auch vom Server getrennt wird. In dieser Zeit kann eine durch die Verbindung belegte Lizenz nicht verwendet werden.
Die Situation kann verbessert werden, indem das Keepalive-Intervall auf einen deutlich kürzeren Wert heruntergesetzt wird. Sinnvoll dürften Werte im Bereich weniger Minuten sein.
Dazu muss über den Registry-Editor von Windows ein neuer Wert in den Ast HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters der Registry der Server-Maschine eingetragen werden.
Legen Sie dort den Wert KeepAliveTime vom Typ REG_DWORD an. Geben Sie die Anzahl Millisekunden an, die zwischen den einzelnen KeepAlive-Nachrichten liegen sollen.
Beispiel-Werte:
- 120000 Dezimal = 2 Minuten
- 300000 Dezimal = 5 Minuten
- 600000 Dezimal = 10 Minuten
- 7200000 Dezimal = 2 Stunden (Standardwert, wenn der KeepAliveTime-Eintrag vollständig fehlt)
- http://support.microsoft.com/kb/140325/en-us: How to Determine Loss of Client/Server Connection
- http://support.microsoft.com/kb/120642/en-us: TCP/IP and NetBT configuration parameters for Windows 2000 or Windows NT
- http://support.microsoft.com/kb/296265/en-us: Windows 2000 Non-Paged Pool Is Exhausted by Afd.sys
Unsere Support-Hinweise wenden sich an Administratoren von mittelständischen Betrieben, die keine hohen Sicherheitsanforderungen haben. Die Anwendung dieser Hinweise geschieht stets auf eigene Gefahr und Verantwortung.