Wie töte ich Windows Zombie TCP-Verbindungen?

11

Ich verwende beyondtv link auf xp und verbinde mich mit beyondtv, einem Vista-Host. Das Link-Programm hängt nach ungefähr 20 Minuten, und ich habe keine Lösung dafür. Wenn dies unter Verwendung von tcpview geschieht, sehe ich, dass der Host noch ungefähr 200 Zombie-TCP-Verbindungen von der Link-Verbindung übrig hat. Ich kann sie nicht löschen, sie stammen aus demselben nicht existierenden Prozess. Die Verbindungen bleiben bestehen, bis ich den Host neu starte. Ein Neustart ist die einzige Möglichkeit, die Verbindung zu beyondtv Link wiederherzustellen. Ich denke, es gibt einen Fehler in beyondtv, der dies verursacht, aber ich kann keine Antworten in ihren Foren bekommen. Aber auf jeden Fall würde ich gerne wissen, ob es einen Weg gibt, all diese Verbindungen zu beenden.

Bearbeiten: Es sind ungefähr 3000 WAIT_CLOSE-Verbindungen, die sich nach ungefähr 40 Minuten ansammeln, und ungefähr dann stirbt der Client. Wenn ich die Server-App schließe, werden alle diese Sockets in tcpview als Eigentum eines nicht vorhandenen Prozesses angezeigt. Verständlich. Aber gibt es keine Möglichkeit, sie zu schließen, ohne neu zu starten?

P aul
quelle
Gibt es hier nicht eine Möglichkeit, eine Prämie für Fragen zu starten? Ich sehe keinen Knopf dafür.
P aul
Sie können eine Prämie anbieten , nachdem die Frage für 2 Tage gewesen ist: superuser.com/faq
Quack quixote
3
Feuer. Feuer oder eine Schrotflinte.
Phoshi
1
@phoshi: oder nuke es aus dem Orbit. Nur so können Sie sicher sein.
Quacksalber Quijote
1
Ich ziehe meine töten die Strafe Weise zu tun: superuser.com/questions/54937/3d-windows-managers/55130#55130
DaveParillo

Antworten:

10

Sie können Nirsofts Currports verwenden , um Verbindungen zu überwachen und zu beenden .

Sie können das Beenden eines Verbindungsmusters mit AutoHotKey automatisieren.

Majkinetor
quelle
7

CLOSE_WAIT bedeutet, dass die Verbindung am anderen Ende geschlossen wurde.

Offensichtlich erkennt beyondtv diesen Zustand nicht und sendet weiterhin Daten an die Anwendung am anderen Ende. Das andere Ende kann über diese Verbindung nichts zurücksenden, da es das Ende der Verbindung geschlossen hat.

Die Lösung besteht darin, den Eintrag TcpTimedWaitDelay in festzulegen

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters

Dieser Eintrag bestimmt die Zeit, die vergehen muss, bevor TCP eine geschlossene Verbindung freigeben und ihre Ressourcen wiederverwenden kann. Dieses Intervall zwischen Schließen und Freigeben wird als TIME_WAIT-Status oder 2MSL-Status bezeichnet. Während dieser Zeit kann die Verbindung für den Client und den Server zu wesentlich geringeren Kosten wieder geöffnet werden als beim Herstellen einer neuen Verbindung.

Auf meinem Computer enthält dies standardmäßig den Wert -1. Dies bedeutet, dass geschlossene Verbindungen niemals freigegeben werden. Dies ist genau das Verhalten, das Sie beobachten.

Ich schlage vor, dass Sie den Wert dieses Eintrags im zulässigen Bereich von 30 bis 300 Sekunden einstellen. Ich nehme an, dass 300 Sekunden = 5 Minuten für Ihren Fall völlig ausreichend sind, wo es 40 Minuten dauert, um Ihren Computer einzufrieren.

harrymc
quelle
Die Suche nach TIME_WAIThat mich hierher gebracht. Danke für die Erklärung und den Link.
Technext
Hallo, danke für die Erklärung. TCP-Verbindungen werden immer noch nicht geschlossen. CLOSE_WAIT steigt. Ich habe Timeout auf 30 Sekunden eingestellt
aadi1295
1

Möglicherweise können Sie Windows zwingen, das Schließen aller TCP-Verbindungen zu erzwingen, indem Sie 1) Ihre Netzwerkschnittstelle deaktivieren und dann 2) wieder aktivieren . Wenn dies funktioniert, können Sie die Schritte, die bei Bedarf ausgeführt werden sollen, per Batch-Skript ausführen.

Ich habe nach einer Möglichkeit gesucht, dies über die Befehlszeile des netshDienstprogramms (oder ähnlichem) zu tun , aber bisher hatte ich kein Glück.

Der beste Weg, dies zu beheben, ist natürlich, die fehlerhafte Anwendung zu beheben. Stellen Sie sicher, dass Sie die neueste Version der Anwendung ausprobieren. nervt die Entwickler weiter; Wenn Sie bereits die neueste Version haben, versuchen Sie, eine ältere Version des Programms zu finden.

Quacksalber
quelle
Ich habe die App auf die neueste Version aktualisiert, nicht geholfen und habe ein Support-Ticket dabei. Ich habe versucht, die Netzwerkeigenschaften zu deaktivieren und sie auch im Geräte-Manager zu deinstallieren, und die Liste der WAIT_CLOSE-Verbindungen war nicht betroffen. Dies ist eine Liste irgendwo im Betriebssystem, die ich anscheinend nicht berühren kann.
P aul
1

Sie erhalten diese CLOSE_WAIT-Sitzungen wahrscheinlich, weil das Programm hängt - ich kann nicht sagen, ob Sie sie als Ursache vermuten, deshalb wollte ich das nur klarstellen.

Ich vermute, dass sie nicht für immer rumhängen werden; wahrscheinlich nur für 2 Stunden und 5 Sekunden. Kann wie für immer scheinen, ich weiß. Sie können versuchen, KeepAliveTime (erfordert wahrscheinlich einen letzten Neustart) für Ihre Netzwerkverbindung auf einen kleinen Wert von beispielsweise 5 Minuten zu optimieren . Das könnte ihnen helfen, schneller zu verschwinden, nachdem Ihr Programm hängt.

Wenn Sie wissen, dass Sie das Programm beispielsweise 10 Minuten lang zuverlässig ausführen können, können Sie es auch regelmäßig neu starten. Sie wissen nicht, ob eine dieser Lösungen für Ihre spezielle Situation nützlich ist. Ich stimme ~ quack zu, dass Sie die problematische App-Version so schnell wie möglich fallen lassen sollten.

Zac Thompson
quelle
Ich denke, das Programm darf die Systemeinstellungen für den KeepAliveTime-Parameter überschreiben, daher hilft es möglicherweise nicht, aber ich stimme zu, dass es sich lohnt, es zu versuchen. Eine Optimierung kann jedoch zu Problemen mit anderen Anwendungen führen.
Quacksalber Quijote
0

Überprüfen Sie, ob beyondtv einen anderen Prozess erzeugt, der die Verbindungen offen hält. Der Prozess-Explorer zeigt Ihnen, ob dies geschieht.

Joe Internet
quelle
Ich kann keine zusätzlichen Prozesse finden. Das Schließen von beyondtv und allen damit verbundenen Prozessen hat keine Auswirkungen. Diese Verbindungen werden für den Prozess mit <nicht vorhanden> angezeigt. Der Prozess wurde beendet, aber die Verbindungen werden nicht geschlossen.
P aul
Ich habe mit den Auf- / Ab-Tasten für die Antwortbewertung gespielt und es gibt keine Möglichkeit, zu 0 zurückzukehren. Es ist entweder -1 oder 1, also habe ich es bei 1 belassen. Es wäre besser, diese Frage zu diesem Zeitpunkt mit 0 Antworten zu haben Diese Antwort ist nicht hilfreich. Ich habe den Prozess-Explorer und tcpview einige Zeit verwendet, bevor ich diese Frage gestellt habe.
P aul
0

Ist es möglich, dass ein Firewall-Problem vorliegt? Möglicherweise wird eine unvollständige Verbindung versucht und erneut versucht.

Ich würde alle Firewalls auf beiden Computern deaktivieren, und wenn es einen Router gibt, auch dessen interne Firewall.

harrymc
quelle
Das habe ich auch schon mal gemacht. Wiederholen Sie das Szenario, keine Auswirkung, Problem bleibt bestehen. Ich schaue mir den linksys Router an, werde ihn aber untersuchen.
P aul