Welche Möglichkeiten gibt es für post mortem-Analyse in .NET (zum Beispiel nach einem Absturz eines Programms)?

StackOverflow https://stackoverflow.com/questions/455122

  •  19-08-2019
  •  | 
  •  

Frage

Nehmen wir an, es gibt ein C # Programm, das als Windows-Dienst verwendet wird. Nehmen wir an, dass der Dienst verwildert ist und verbraucht CPU und Speicher wie verrückt. Es muss sehr bald neu gestartet, weil es ein Produktionssystem ist. Also ich habe nicht viel Zeit, Laufzeit-Informationen zu sammeln. Vielleicht ein kurzer Blick auf den Task-Manager ... das ist alles.

Danach ist alles was ich habe ist log4net Log-Dateien und Windows-Ereignisprotokoll für post mortem-Analyse.

Nehmen wir an, dass ich den Grund für das Problem herausgefunden haben. Jemand anderes fixiert sie und vielleicht fügt der Programmierer einige zusätzliche Protokollierung, so kann ich ein ähnliches Problem beim nächsten Mal schneller finden. Trotzdem: Ich hänge noch von der Qualität der Protokolldateien und hoffen, dass das nächste Mal ein Problem irgendwie reveil selbst in den loggings

.

Gibt es auch andere Wege post mortem-Analyse zu tun? Vielleicht, Speicher etwas wie Thread-Dumps (wie in Java) Dumps oder etwas anderes, die in post mortem-Analyse helfen können? Vielleicht können einige build-in .NET-Framework-Tool helfen?

Ich bin sehr interessiert an realen Projekterfahrungen und wie Sie würde versuchen, diese Wartung Frage in Angriff zu nehmen, die ich denke für die meisten Programmierer sehr real ist.

War es hilfreich?

Lösung

Wie Marc sagt WinDbg + SoS wird Ihnen eine Menge Probleme zu debuggen, können Sie wirklich nicht in Visual Studio adressieren. Es gibt einige ausgezeichnet Tutorials Blog .

Für Speicherprobleme können Sie an den .NET Leistungsindikatoren in Perfmon aussehen auch. Sie konnten sehen, wo Objekte befinden (die Generation) und wie viel Zeit ist in der Garbage Collection verbringen. Das sollte Ihnen einige nützliche Informationen geben. Wenn Sie wissen wollen, warum Objekt wird nicht gesammelt WinDbg und SoS ist der Weg zu gehen. Gehen Sie durch eine einfache Sitzung die Schritte sind:

  1. Überprüfen Sie den Haufen !dumpheap -stat verwenden, sucht große Anzahl von Instanzen. Sie haben wahrscheinlich eine Vorstellung davon, was Sie auf dem Heap zu einem bestimmten Zeitpunkt zu finden erwarten würden, so dass, wenn etwas aus dem üblichen heraus schaut, schauen Sie in die.

  2. Zufall Instanz-Auswahl und ein !gcroot auf der Adresse der Instanz tun. Das wird Ihnen sagen, warum das Objekt nicht gesammelt werden.

  3. Wiederholen

Mögliche Kandidaten für die Führung Sachen länger am Leben, als es soll, sind: Veranstaltungen, Statik und die Finalizer-Warteschlange ein paar zu nennen.

Sie können auch einen Blick auf meine Antwort nehmen diese Frage mehr WinDbg Sachen zu sehen.

Andere Tipps

Sie können tun Absturz mit .NET-Dumps, und betrachten sie mit windbg / sos (und sosassist). Nicht einfach, aber es funktioniert. Aber ziemlich hardcore. Suchen Sie auf "+ windbg + .NET" sollte interessant sein.

Anders als die - Ressourcenzähler? Protokolldateien? Viele Dinge, die man an, dass aussehen könnte kann ziemlich leicht aktiviert werden.

Leider habe ich eine ganze Menge dies zu tun - das beste Werkzeug, das ich über gekommen sind ist cordbg, die mit dem sdk kommt (Sie die richtige Version für Ihre .net-Version benötigen). http://msdn.microsoft.com/en-us/library/a6zb7c8d. aspx .

Befestigen

in den laufenden Prozess in cordbg (a <[pid]>), heften sich an jedem laufenden Faden (t <[tid]>), dann den Stapel Dump für jeden Thread (w).

Die Automatisierung dieser Aufgabe mit ein wenig vb Skript und dann in eine Datei Dumping können Sie dieses Tool mehrere Male ausgeführt werden, die Ausgabe in einer Datei zu erfassen. Vergleich aller Thread-Stacks wird Ihnen eine sehr gute Idee, wo Ihre Anwendung zu verbringen, es ist Zeit.

Das Schöne an diesem Ansatz, vor allem mit den Deponien zu automatisieren, ist, dass man sehr schnell alle Informationen greifen und Ihren Prozess in kürzester Zeit neu gestartet bekommen.

Eine große Ressource für post-mortem-Analyse mit WinDbg und SOS ist Tess Ferrandez‘ Reihe von Blog-Einträgen zum Thema.

EDIT: Link aktualisiert

Wenn der Prozess leben noch, dann können Sie die Managed Stack-Explorer dagegen einen schnellen Überblick zu bekommen, was es tut. Sie können dies ausführen, ohne eine explizite installieren.

Anders als das dann eine vollständige Dump + windbg + SOS gibt Ihnen die Informationen, aber es ist nicht immer trivial.

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