Frage

Unsere Server-Anwendung auf einem Port lauscht, und nach einer gewissen Zeit nicht mehr akzeptiert eingehende Verbindungen. (Und während ich dieses Problem zu lösen, würde gerne, es ist nicht das, was ich hier bin gefragt;)

Das seltsame ist, dass, wenn unsere App stoppt Verbindungen auf Port 44044, so tut IIS (auf Port 8080) zu akzeptieren. Töten unserer App alles behebt -. IIS startet wieder reagiert

Die Frage ist also, kann eine Anwendung vermasseln stapelt die gesamte TCP / IP? Oder vielleicht, wie kann eine Anwendung das tun?

Senseless Detail. Unsere App ist in C # geschrieben, unter .Net 2.0, auf XP / SP2

Zur Verdeutlichung: IIS ist nicht die versuchten Verbindungen „Verweigerung“. Es ist zu sehen, sie nie. Kunden erhalten eine Meldung „Server nicht in einer angemessenen Weise reagiert hat“ (mit .NET TCP-Client.)

War es hilfreich?

Lösung

Sie gut können den Stapel hungern. Es ist ziemlich einfach, in einer hohen Öffnen / Schließen-Transaktionen pro Sekunde Umgebung abzulassen z.B. Webserver viele unpooled Anfragen dienen.

Dies wird durch die Standard-TIME-WAIT Verzögerung exhacerbated - die Höhe der Zeit, dass ein Socket geschlossen werden muss, bevor recycelt standardmäßig 90s zu sein (wenn ich mich recht erinnere)

Es gibt eine Reihe von Registrierungsschlüsseln, die optimiert werden können - legen nahe, zumindest die folgenden Schlüssel erstellt / bearbeitet

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

TcpTimedWaitDelay = 30
MaxUserPort = 65534 
MaxHashTableSize = 65536 
MaxFreeTcbs = 16000 

Viel docs auf MSDN und Technet über die Funktion dieser Tasten ist.

Andere Tipps

Sie haben nicht die verfügbaren Port Griffe ausgereizt haben Sie?
    netstat -a

sehe ich etwas ähnlich, wenn eine App wurde Öffnen und Schließen Ports (aber nicht wirklich, sie richtig zu schließen).

Verwenden Sie netstat -a die aktiven Verbindungen zu sehen, wenn dies geschieht. Vielleicht endet Ihre Server-Anwendung nicht / von ‚geschlossenen‘ Verbindungen zu entsorgen.

Gute Vorschläge von allen, vielen Dank für Ihre Hilfe.

Also hier ist was los war: Es stellt sich heraus, dass wir mehrere Dienste im Wettbewerb um den gleichen Port hatte, und die meiste Zeit die „richtige“ Service würde den Hafen bekommen. Gelegentlich wird ein zweiter Dienst würde den Hafen greifen entfernt, und der erste Dienst würde versuchen, einen anderen Port zu öffnen. Von diesem Zeitpunkt an, würde halten die Dienste neue Häfen greifen jedes Mal, wenn sie eine Anforderung bedient (da sie nicht ihre bevorzugten Häfen wurden unter Verwendung) und schließlich würden wir alle verfügbaren Ports erschöpfen.

Natürlich war die eigentliche Frage: „Kann ein Antrag vermasseln stapelt die gesamte TCP / IP?“, Und die Antwort auf diese Frage lautet: Ja. Eine Möglichkeit, es zu tun ist, auf eine ganze Reihe von Ports zu hören.

Ich denke, die Portnummer, Kommentar von Richs korrekt ist.

Anders als das, das TCP / IP-Stack ist nur ein Modul in Ihrem Betriebssystem und als solche können Fehler haben, die eine Anwendung, es töten lassen könnte. Es wäre nicht der erste Fahrer sein, um von einem Programm getötet werden.

(Ein Tipp auf den Hut zu Andrew Tanenbaum für beharren, dass Betriebssysteme sollten statt monolithischen modular sein.)

Ich habe mich in ein paar ähnlichen Situationen gewesen. Ein guter Schritt zur Fehlerbehebung ist eine Verbindung von der betroffenen Maschine zu gut bekanntem Ziel, zu versuchen, die nicht zu diesem Zeitpunkt ist keine Verbindungsprobleme auftreten. Wenn der Verbindungsversuch fehlschlägt, werden Sie sehr wahrscheinlich mehr interessante Details in der Fehlermeldung / Code zu erhalten. Zum Beispiel könnte es sagen, dass es nicht genug Griffe oder Speicher.

Von einem Support und System-Administratoren Standpunkt, ich habe dies nur auf dem seltensten Gelegenheiten gesehen (mehr als einmal), aber es kann sicherlich passieren.

Wenn Sie das Problem diagnostizieren, sollten Sie die möglichen Ursachen sorgfältig beseitigen, anstatt blind das System beim ersten Anzeichen von Schwierigkeiten Neustart. Ich sage nur, weil viele Kunden mit denen ich arbeite sind versucht, das zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top