Java Virtual Machine (JVM) generiert 3 kritische Artefakte, die für die Optimierung der Leistung und die Fehlerbehebung bei Produktionsproblemen nützlich sind. Diese Artefakte sind:

  1. Garbage Collection (GC)-Protokoll
  2. Thread-Dump
  3. Haufen Dump

1. Garbage-Collection-Protokoll

a) Was ist ein GC-Protokoll?

Das GC-Protokoll enthält Informationen zu Garbage-Collection-Ereignissen. Es wird angezeigt, wie viele GC-Ereignisse liefen, welcher Typ dieser Befehl dieser Befehl von GC-Ereignissen ist (dh Young GC oder Full GC), wie lange jedes GC-Ereignis die Anwendung anhält, wie viele Objekte jedes GC-Ereignis zurückgefordert hat.

b) Wie sieht ein GC-Protokoll aus?

Eine Beispiel-Garbage-Collection-Protokolldatei finden Sie hier.

c) Wo werden GC-Protokolle verwendet?

Garbage-Collection-Protokolle werden verwendet, um die GC- und Speicherleistung der Anwendung zu untersuchen. Es wird verwendet, um die GC-Pausenzeiten zu optimieren, es wird verwendet, um die optimale Speichergröße für Ihre Anwendung zu identifizieren, es wird auch verwendet, um speicherbezogene Probleme zu beheben.

d) Wie erstelle ich ein GC-Protokoll?

Sie können Garbage-Collection-Protokolle generieren, indem Sie die folgenden JVM-Argumente übergeben:

Auf Java-Versionen bis 8:

Auf Java-Version ab 9:

Dateipfad: ist der Speicherort, an den die Protokolldatei der Garbage Collection geschrieben wird.

e) Wie ist ein GC-Protokoll zu verstehen?

Das Format des Garbage-Collection-Protokolls variiert je nach JVM-Anbieter (Oracle, HP, IBM, Azul, …), Java-Version (1.5, 5, 6, 7, 8, 9, 10, 11, 12, …), Garbage Sammlungsalgorithmus (Serial, Parallel, CMS, G1, Shenandoah, Z GC) und JVM-Argumente, die Sie übergeben. Daher gibt es kein standardisiertes Format. Hier ist jedoch ein Video-Tutorial, das versucht, Ihnen zu helfen, das GC-Protokolldateiformat zu verstehen.

f) Welche Tools werden verwendet, um ein GC-Protokoll zu analysieren?

Es gibt mehrere Tools zur Analyse von Garbage-Collection-Protokollen. Einige der beliebtesten sind hier aufgeführt: GCeasy, IBM GC & Memory Visualizer, HP JMeter, Google Garbage Cat

2. Thread-Dump

a) Was ist ein Thread-Dump?

Ein Thread-Dump ist eine Momentaufnahme aller Threads, die zu einem bestimmten Zeitpunkt in der Anwendung ausgeführt werden. Es enthält alle Informationen zu jedem Thread in der Anwendung, z. B. Thread-Status, Thread-ID, native ID, Thread-Name, Stack-Trace und Priorität.

b) Wie sieht ein Thread-Dump aus?

Einen Beispiel-Thread-Dump finden Sie hier.

c) Wo wird ein Thread-Dump verwendet?

Thread-Dumps werden hauptsächlich zur Behebung von Produktionsproblemen wie CPU-Spitzen, fehlende Reaktion in der Anwendung, schlechte Reaktionszeit, hängende Threads, hoher Speicherverbrauch verwendet.

d) Wie erzeuge ich einen Thread-Dump?

Thread-Dumps können von der laufenden Anwendung mit 8 verschiedenen Optionen erfasst werden. Die gebräuchlichste Option zum Erstellen eines Thread-Dumps ist die Verwendung des Tools „jstack“. Das jstack-Tool wird im JDK_HOMEbin-Ordner ausgeliefert. Hier ist der Befehl, den Sie ausführen müssen, um den Thread-Dump zu erfassen:

pid: ist die Prozess-ID der Anwendung, deren Thread-Dump erfasst werden soll

Dateipfad: ist der Dateipfad, in den der Thread-Dump geschrieben wird.

e) Wie ist ein Thread-Dump zu verstehen?

Hier ist ein Videovortrag, der einen guten detaillierten Überblick darüber gibt, wie man die Thread-Dumps versteht.

f) Welche Tools werden verwendet, um einen Thread-Dump zu analysieren?

Hier sind die am häufigsten verwendeten Thread-Dump-Analysetools: fastThread, Samurai, IBM Thread & Monitor Analyzer, Visual VM

3. Heap-Dump

a) Was ist ein Heap-Dump?

Ein Heap-Dump ist eine Momentaufnahme des Arbeitsspeichers Ihrer Anwendung zu einem bestimmten Zeitpunkt. Es enthält Informationen darüber, was die Objekte im Speicher sind, welche Werte sie tragen, welche Größe sie haben und auf welche anderen Objekte sie verweisen.

b) Wie sieht ein Heap Dump aus?

Einen Beispiel-Heap-Dump finden Sie hier. (Hinweis: Es wird im Binärformat vorliegen. Sie können es also eigentlich nicht lesen).

c) Wo wird ein Heap-Dump verwendet?

Heap-Dumps werden hauptsächlich zur Fehlerbehebung bei speicherbezogenen OutOfMemoryError-Problemen verwendet.

d) Wie erzeuge ich einen Heap-Dump?

Heap-Dump kann von der laufenden Anwendung mit 7 verschiedenen Optionen erfasst werden. Die häufigste Option zum Erstellen eines Heap-Dumps ist die Verwendung des Tools „jmap“. Das jmap-Tool wird im JDK_HOMEbin-Ordner ausgeliefert. Hier ist der Befehl, den Sie zum Erfassen eingeben müssen:

pid: ist die Java-Prozess-ID, deren Heap-Dump erfasst werden soll

file-path: ist der Dateipfad, in den der Heap-Dump geschrieben wird.

e) Wie versteht man einen Heap Dump?

Heap-Dump-Dateien sind im Binärformat und tendenziell sehr groß. Außerdem fehlt es ihrem Format stark an Dokumentation. Daher müssen Sie die Heap-Dump-Analysetools (in der nächsten Frage angegeben) verwenden, um sie zu analysieren und zu verstehen.

f) Welche Tools werden verwendet, um einen Heap-Dump zu analysieren?

Hier sind die am häufigsten verwendeten Heap-Dump-Analysetools: Eclipse MAT, HeapHero, JVisualVM.
Wir hoffen, dass dieser Artikel alle Methoden zum Analysieren von Garbage Collection-Protokollen, Thread-Dumps und Heap-Dumps behandelt. Wenn Sie diesen Artikel wirklich hilfreich fanden, teilen Sie diese Informationen bitte mit Ihren Freunden, Verwandten, Ihrer Familie und anderen. Wir sehen uns in den nächsten Beiträgen mit signalfix.net!