Ist es angemessen, HeapDumpOnOutOfMemoryError in der Produktion zu verwenden?

9

Wir haben Probleme, die Ursache eines OutOfMemoryError zu diagnostizieren, den wir auf einem unserer Produktionsserver festgestellt haben. Unsere Versuche, das Problem in Einweich-Tests zu reproduzieren, sind bisher gescheitert, und wir erwägen, es -XX:+HeapDumpOnOutOfMemoryErrorauf unseren Produktionsservern zu aktivieren , damit wir zumindest einige Daten haben, wenn es erneut auftritt.

Ist es sinnvoll, diese Einstellung auf Produktionsservern zu aktivieren?

James_pic
quelle
Kommt darauf an, wie kritisch der Service ist.
Peter
@ Peter Critical. Wir verlieren jedes Mal Geld, wenn der Service ausfällt.
James_pic
Ich bin mir nicht sicher, was ich dir sonst noch sagen soll. Es wäre besser, wenn Sie einen Staging-Server hätten.
Peter
Wir haben einen Staging-Server. Und der Service ist lastausgeglichen. Wenn also ein Ausfall auftritt, wird er schnell auf das andere Bein übertragen.
James_pic

Antworten:

11

Schauen Sie sich die Dokumentation an :

B.1.2 -XX: + HeapDumpOnOutOfMemoryError Option

Die -XX:+HeapDumpOnOutOfMemoryErrorBefehlszeilenoption weist die HotSpot-VM an, einen Heap-Dump zu generieren, wenn eine Zuordnung vom Java-Heap oder der permanenten Generierung nicht erfüllt werden kann. Mit dieser Option ist kein Aufwand verbunden. Daher kann sie für Produktionssysteme nützlich sein, bei denen das OutOfMemoryErrorAuftauchen lange dauert.

Sie können diese Option auch zur Laufzeit auf der Registerkarte MBeans im Dienstprogramm jconsole angeben.

Der Heap-Dump ist im HPROFBinärformat und kann daher mit allen Tools analysiert werden, die dieses Format importieren können. Zum Beispiel kann das jhat-Tool verwendet werden, um eine rudimentäre Analyse des Dumps durchzuführen.

-XX:+HeapDumpOnOutOfMemoryErrorDas Flag führt zur Laufzeit nicht zu Leistungs- oder Sicherheitsproblemen. Das Flag wird erst überprüft, nachdem OutOfMemoryErrordies geschehen ist.

Sie können den tatsächlichen Pfad, in dem die Datei gespeichert wird, mit dem entsprechenden -XX:HeapDumpPathFlag angeben . (Unabhängig davon, wo die Datei gespeichert ist, stellen Sie sicher, dass das Dateisystem und / oder der Java-Prozess über die erforderliche Berechtigungskonfiguration verfügen, um dort schreiben zu können.)

Federico Sierra
quelle
Woher stammt das Zitat?
AlikElzin-Kilaka
1
@ AlikElzin-kilaka docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/…
Federico Sierra