Automatisieren – OutOfMemoryError Fehlerbehebung | Komentor

Die Fehlerbehebung bei OutOfMemoryError oder anderen speicherbezogenen Problemen wird auch im Jahr 2019 manuell durchgeführt. Die Fehlerbehebung und Identifizierung der Grundursache von OutOfMemoryError kann sogar automatisiert werden, indem die unten genannten 3 Schritte befolgt werden:

1.Heap-Dump erfassen
2.Anwendung neu starten
3. Problemdiagnose

Lassen Sie uns diese Schritte im Detail besprechen.

(1). Heap-Dump erfassen
Heap Dump ist im Grunde eine Momentaufnahme des Speichers. Es enthält Details zu Objekten, die im Speicher vorhanden sind, tatsächliche Daten, die in diesen Objekten vorhanden sind, Verweise, die von diesen Objekten stammen … Heap-Dump ist ein wichtiges Artefakt, um Speicherprobleme zu beheben.

Um OutOfMemoryError oder ein anderes speicherbezogenes Problem zu diagnostizieren, müsste man den Heap-Dump genau in dem Moment oder wenige Augenblicke, bevor die Anwendung beginnt, OutOfMemoryError zu erleben, erfassen. Es ist schwierig, einen Heap-Dump im richtigen Moment manuell zu erfassen, da wir nicht wissen, wann OutOfMemoryError ausgelöst wird. Das Erfassen von Heap-Dumps kann jedoch automatisiert werden, indem die folgenden JVM-Argumente übergeben werden, wenn Sie die Anwendung in der Befehlszeile starten:

-XX:+HeapDumpOnOutOfMemoryError and -XX:HeapDumpPath={HEAP-DUMP-FILE-PATH}

Beispiel:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/crashes/my-heap-dump.hprof

In ‘-XX:HeapDumpPath’ müssen Sie den Dateipfad angeben, in dem der Heap-Dump gespeichert werden soll.

Wenn Sie diese beiden JVM-Argumente übergeben, werden Heap-Dumps automatisch erfasst und in einen angegebenen Dateipfad geschrieben, wenn OutOfMemoryError ausgelöst wird.

(2). Applikation neustarten

In den meisten Fällen führt OutOfMemoryError nicht zum Absturz der Anwendung. Es ist jedoch besser, die Anwendung neu zu starten, sobald OutOfMemoryError ausgelöst wird. Weil OutOfMemoryError die Anwendung möglicherweise in einem instabilen Zustand belassen kann. Anfragen, die von einer instabilen Anwendungsinstanz bedient werden, können zu einem fehlerhaften Ergebnis führen.

Sie können diesen Neustartvorgang auch automatisieren. Schreiben Sie ein „restart-myapp.sh“-Skript, das Ihre Anwendung ordnungsgemäß herunterfährt und neu startet. Geben Sie nun den Pfad dieses Skripts im JVM-Argument „-XX:OnOutOfMemoryError“ an.

Beispiel:

 -XX:OnOutOfMemoryError=/scripts/restart-myapp.sh

Wenn Sie dieses Argument übergeben, ruft JVM das Skript „/scripts/restart-myapp.sh“ auf, wenn OutOfMemoryError ausgelöst wird. Daher wird Ihre Anwendung automatisch neu gestartet, sobald ein OutOfMemoryError auftritt.

(3). Problemdiagnose

Jetzt haben wir den Heap-Dump erfasst (der zur Behebung des Problems benötigt wird) und die Anwendung neu gestartet (um die Auswirkungen des Ausfalls zu verringern). Der nächste Schritt ist die Fehlerbehebung. Das kann etwas knifflig sein 😊, aber mit den richtigen Werkzeugen erreicht werden. Sie können Tools wie verwenden Eklipse MAT, HeapHero Heap-Dumps zu analysieren. Diese Tools erstellen einen guten Speicheranalysebericht und heben die Objekte hervor, die Speicherverluste verursachen. Die meisten Unternehmen führen diesen Schritt jedoch manuell durch.

Auch dieser Schritt kann durch Aufrufen automatisiert werden HeapHero-REST-API. Diese API analysiert den Heap-Dump und gibt einen hervorragenden Analysebericht zurück. Sie können diese API direkt nach dem Skript „restart-myapp.sh“ aufrufen. Auf diese Weise können Sie die Fehlerbehebung bei OutOfMemoryError automatisieren.

Viel Spaß bei der Fehlersuche.

Similar Posts

Leave a Reply

Your email address will not be published.