Mir wurde gesagt, dass ich den Parameter -XX:+HeapDumpOnOutOfMemoryError
Zu meinen JVM-Startoptionen in meinem JBoss-Startskript hinzufügen kann, um einen Heap-Dump zu erhalten, wenn in unserer Anwendung ein Fehler aufgrund unzureichenden Speichers auftritt. Ich habe mich gefragt, wo diese Daten gespeichert werden. Geht es nur um die Konsole oder um eine Protokolldatei? Wenn es sich nur um die Konsole handelt, was ist, wenn ich nicht über die Konsole beim Unix-Server angemeldet bin?
Hier ist, was Oracle Dokumentation zu sagen hat:
Standardmäßig wird der Heap-Dump in einer Datei namens Java _ pid . Hprof im Arbeitsverzeichnis der VM erstellt, wie im obigen Beispiel. Sie können einen alternativen Dateinamen oder ein alternatives Verzeichnis mit der Option
-XX:HeapDumpPath=
Angeben. Zum Beispiel bewirkt-XX:HeapDumpPath=/disk2/dumps
, Dass der Heap-Dump im Verzeichnis/disk2/dumps
Generiert wird.
Sie können diesen Speicherauszug über die UNIX-Konsole anzeigen.
Der Pfad für den Heap-Dump wird als Variable direkt nach dem Platzieren der genannten Variablen angegeben.
Z.B.:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DOMAIN_HOME}/logs/mps"
Sie können den Speicherauszug in der Konsole unter dem angegebenen Pfad anzeigen.
Ich fand es schwer zu entschlüsseln, was mit "Arbeitsverzeichnis der VM" gemeint ist. In meinem Beispiel habe ich das Service Wrapper-Programm Java Service Wrapper) verwendet, um eine JAR-Datei auszuführen. Die Sicherungsdateien wurden in dem Verzeichnis erstellt, in dem ich das Wrapper-Programm abgelegt hatte, z. B. c:\myapp\bin. Der Grund, warum ich dies entdeckt habe, ist, dass die Dateien sehr groß sein können und die Festplatte voll ist, bevor ich ihren Speicherort gefunden habe.
Wenn Sie nicht die Option "-XX: HeapDumpPath" verwenden, wird bei JBoss EAP/As standardmäßig die Heap-Dump-Datei im Verzeichnis "JBOSS_HOME/bin" generiert.