Mir wurde gesagt, dass ich den -XX:+HeapDumpOnOutOfMemoryError
Parameter zu meinen JVM-Startoptionen zu meinem JBoss-Startskript hinzufügen kann , um einen Heap-Dump zu erhalten, wenn in unserer Anwendung ein Speicherfehler auftritt. Ich habe mich gefragt, wo diese Daten gespeichert werden. Geht es nur um die Konsole oder um eine Protokolldatei? Was passiert, wenn ich nicht über die Konsole beim Unix-Server angemeldet bin?
java
jboss
memory-leaks
heap
Dmitry Trunov
quelle
quelle
Antworten:
In der Dokumentation von Oracle heißt es:
quelle
HeapDumpPath
Sie werden etwas Ähnliches wie"Unable to create /tmp/java_pidpid.hprof: File exists"
in Ihrem Standard-Out sehen. Stellen Sie sicher, dass Sie Ihre Dump-Datei aus dem Dump-Pfad verschieben, um den Weg für zukünftige Dump-Dateien freizumachen. Verwenden Sie den<pid>
Platzhalter im Dateinamen, um die Entropie im Dateinamen zu erhöhen.Sie können diesen Speicherauszug über die UNIX-Konsole anzeigen.
Der Pfad für den Heap-Dump wird direkt nach dem Platzieren der genannten Variablen als Variable bereitgestellt.
Z.B:
Sie können den Speicherauszug von der Konsole aus auf dem angegebenen Pfad anzeigen.
quelle
Es fiel mir schwer zu entschlüsseln, was unter "Arbeitsverzeichnis der VM" zu verstehen ist. In meinem Beispiel habe ich das Java Service Wrapper-Programm verwendet, um ein JAR auszuführen. Die Dump-Dateien 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 gefüllt haben, bevor ich ihren Speicherort entdeckt habe.
quelle
Wenn Sie die Option "-XX: HeapDumpPath" nicht verwenden, wird bei JBoss EAP / As standardmäßig die Heap-Dump-Datei im Verzeichnis "JBOSS_HOME / bin" generiert.
quelle