2 Stimmen

.NET OutOfMemory-Ausnahme

Wir haben eine .NET-Anwendung, die seit über einem Jahr in Produktion ist. Es handelt sich um einen Hintergrunddienst, der so geschrieben ist, dass er automatisch neu gestartet wird, wenn er aus irgendeinem Grund abstürzt. Bis vor kurzem bereitete sie uns keine Kopfschmerzen, obwohl sie täglich eine große Last bewältigt, aber jetzt stürzt sie alle Jubeljahre einmal mit der OutOfMemorey-Ausnahme ab. Nach dem Neustart macht es dort weiter, wo es abgestürzt ist, und tut, was es tun soll, also ist es dem Kunden egal, aber ich würde gerne verstehen, was den Absturz verursacht.

Daher die Frage: Gibt es eine Möglichkeit, den Absturz zu untersuchen, OHNE die App neu zu deployen? Ich würde gerne einen Crash-Dump oder ähnliches erstellen und dann manuell durch den Dump gehen, um herauszufinden, welche Objekte meinen gesamten Speicher verbraucht haben. Welche Tools würden Sie mir empfehlen, um diese Aufgabe zu erleichtern?

4voto

LBushkin Punkte 124894

Vielleicht finden Sie den folgenden Artikel von MSDN hilfreich:

Produktions-Debugging für .NET Framework-Anwendungen

http://msdn.microsoft.com/en-us/library/ms954591.aspx

Obwohl ASP.NET-Anwendungen im Detail besprochen werden, sind einige der beschriebenen Techniken genauso gültig, wenn Speicheranalysen für Dienste oder eigenständige Anwendungen durchgeführt werden.

Sie können auch Perfmon verwenden, um sich mit dem Prozess zu verbinden und zu sehen, ob Sie ein starkes Wachstum in den Gen 1- oder Gen 2-Heaps erhalten - dies ist normalerweise ein Hinweis auf Objekte, die zu viele Garbage Collections überleben und Speicherdruck in Ihrer Anwendung verursachen. Sie sollten sich auch die Größe der Metrik Private Bytes ansehen - ein Wachstum dieser Metrik deutet darauf hin, dass Ihrem Prozess viel nicht verwalteter Speicher zugewiesen wird.

Die Perfmon-Analyse ist nützlich, weil sie die Speichernutzung im Laufe der Zeit aufzeigt und dabei hilft, festzustellen, ob bestimmte Verarbeitungsarten oder Transaktionen für den Speicherverbrauch verantwortlich sind.

Wenn Sie das Problem in einer Testumgebung reproduzieren können, gibt es eine ausgezeichneter Speicher-Profiler von Red Gate Software die dabei helfen können, solche Probleme in einem Bruchteil der Zeit zu finden, die das Durchsuchen von Speicherauszügen dauern würde.

Es gibt einige Tools, die im Hintergrund laufen können (z. B. DebugDiag) und die es ermöglichen, regelmäßig oder bei bestimmten Ereignissen Speicherauszüge zu erstellen. Sie können hier darüber lesen:

http://blogs.msdn.com/sukeshak/pages/ddintro.aspx

http://blogs.msdn.com/tess/archive/2009/01/23/net-hang-analyzing-debug-diag-output.aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X