Wenn Sie Process Monitor ausführen, funktioniert die Anwendung

578
lcam

Dies ist ein Longshot, aber vielleicht hat jemand mit Kenntnissen der internen Funktionsweise von Sysinternals Process Monitor eine Idee.

Vor kurzem hatten wir ein sehr schweres Problem bei der Arbeit. Wir haben eine Software (nennen Sie sie SW1), die an einem bestimmten Port eine Socket-Verbindung mit einer anderen Software herstellt (nennen Sie sie SW2) und empfängt einige Daten von dieser Software. Anschließend erstellt er eine weitere Socket-Verbindung mit einem anderen zugehörigen Prozess und sendet einige Daten. Danach startet der Zyklus neu und es werden weitere Daten von SW2 empfangen.

Dies ist eine sehr vage Beschreibung, und ich habe mit keiner dieser Anwendungen nichts zu tun. Als Besitzer der Workstations bin ich jedoch stark in die Unterstützung involviert. Dieses ganze System funktionierte ohne Probleme an einer bestimmten Workstation, lehnte jedoch die Arbeit an vier anderen identischen Workstations ab. Das Symptom war das plötzliche Anhalten von Paketen, die zwischen den zwei eigenen Prozessen von SW1 gesendet wurden, natürlich gefolgt von einem Timeout von SW2.

Nun, für das verrückte bisschen: Nach wochenlangem Debugging mit den relevanten Teams und dem Ausführen von Wireshark entschied ich mich, Process Monitor auszuführen, vielleicht tauchte etwas auf. Komischerweise blieben die Socket-Verbindungen bestehen und das Ganze funktionierte! Da wir es für einen Zufall hielten, haben wir versucht, einen Prozessmonitor für die anderen drei auszuführen, und alle fingen an zu arbeiten. Es sieht auch so aus, als ob ein Neustart alles weiterhin die Anwendungen am Laufen hält.

Natürlich bleibt die Frage: Welche Auswirkungen könnte Process Monitor auf diese Anwendungen haben? Aufgrund der Art der Lösung kann ich eine procmon-Erfassung nicht wirklich analysieren, da sie das Problem zu lösen scheint ...

Vielen Dank!

0

1 Antwort auf die Frage

0
piedramania

Es klingt nach einer Rennbedingung oder einem Deadlock .

Dh: SW1 und SW2 müssen ein Kommunikationsprotokoll mit Anforderungen und Bestätigungen haben. Wenn dieses Protokoll nicht gut ausgelegt ist, kann es eine Race-Bedingung geben, bei der Pakete nicht in der richtigen Reihenfolge gesendet werden. SW1 wird gestapelt und wartet auf ein Paket von SW2, aber SW2 hat bereits in der Vergangenheit gesendet (und SW1 hat es verfehlt), und SW2 wird es nicht erneut senden und wird auf SW1 in einen Sperrzustand versetzt.

Wenn dies der Fall ist, hängt der Fehler von der Ausführungsgeschwindigkeit von SW1 und SW2 und weiter von der Auslastung der Server ab. Wenn beide Prozesse langsam ausgeführt werden, ist es schwieriger, dass SW1 das Paket von SW2 verfehlt, wodurch der Sperrstatus erstellt wird. Durch Ausführen des Systemmonitors wird das gesamte System etwas langsamer, was möglicherweise ausreicht, um dies zu erreichen.

Wenn für die verschiedenen Server der erste Server mehr ausgelastet ist als die anderen, dann funktioniert er.

Interessantes Konzept, aber aus der Wireshark-Analyse scheint es, als ob die Pakete in der Reihenfolge identisch sind, bis zu dem Teil, an dem es natürlich nicht mehr funktioniert ... und auch das wichtigste Bit, das ich in meiner Frage bearbeiten möchte - nicht Sie müssen Procmon jedes Mal ausführen, damit die Anwendung funktioniert. Wenn ich die Workstations neu starte, funktioniert alles noch! Scheint wie eine einmalige Modifikation ... lcam vor 7 Jahren 0
Ich erkenne an, dass der tote Blick eine entfernte Möglichkeit ist. Aber es ist immer noch machbar. Die Reihenfolge der Pakete ist nicht kritisch für die Erstellung des Deadlocks, sondern für das Timing. Wenn SW2 sehr schnell antwortet und SW1 nicht gut entwickelt ist, hat es möglicherweise das Paket verpasst und wird gestapelt und wartet darauf. Es ist, als würde man pünktlich zur Bushaltestelle kommen, aber niemand wartet. Sie wissen nicht, ob der Bus kommen soll oder ob er weg ist. Überprüfen Sie das Timing der Pakete von den verschiedenen Servern oder führen Sie eine andere Software als Procmon aus. Dadurch wird der Server stark ausgelastet, um zu sehen, ob Sie den gleichen Effekt erzielen. piedramania vor 7 Jahren 0
Vielen Dank für die Erklärung piedramania - Ich untersuche jetzt, das Problem auf einer Offline-Workstation zu replizieren, damit ich mit dem Problem experimentieren kann. Ich werde es versuchen. Vielen Dank! lcam vor 7 Jahren 0
Diese Erklärung gilt nicht, wenn jetzt alles funktioniert und ohne Process Monitor weiterarbeitet. harrymc vor 7 Jahren 0