Java Heap Dump erstellen und auswerten


Umgebung

  • Wildfly 14
  • EE8

Wenn der Speiche auf dem Server zu Neige geht, musst du dir überlegen, wie du analysierst wer wieviel Speicher verwendet. Eine Möglichkeit ist das Erzeugen von Heap Dumps, die den Speicher zu einem festen Zeitpunkt abbilden und dann ausgewertet werden können. Wenn es schon „zu spät“ ist und der Server nicht stabil läuft, kann ein Dump auch automatisch erzeugt werden. Hier eine paar Infos mit denen du in sehr kurzer Teit einen Dump erstellen und analysieren kannst. Siehe auch die Oracle Doku.

Einen Dump erstellen

Zum einen gibt es die Möglichkeit der VM den Parameter

 
-XX:+HeapDumpOnOutOfMemoryError

mitzugeben. Werden dann mehr als 98% der Heaps belegt, wird ein Dump im Arbeitsverzeichnis erzeugt. Der Name enthält die Prozess ID als eindeutige Kennzeichnung.

Besser ist es jedoch, wenn man sich proaktiv den Speicher ansehen kann. Die Admin Console des Wildfly gibt einen ersten Überblick über den aktuellen Heap und den zugesicherten Speicher. Diese Angaben sind aber immer eine Abschätzung nach oben, da der GC meistens noch nicht alles bereinigt hat. Wird es eng, kann es sinnvoll sein mit dem Befehl

 
jmap -dump:format=b,file=heap.bin <pid>

einen Hepa-Dump zur Laufzeit zu erstellen (jmap findet sich im bin Verzeichnis des JDK). Die Prozess ID bekommst du unter Windows aus dem Task Manager oder unter Linux mit ps –ef | grep java.

Dump anzeigen

Es gibt verschiedene Tools wie beispielsweise Jvisualvm oder jhat. Die besten Ergebnisse habe ich mit dem Eclipse Memory Analyser erziehlt.

Nach der Installation ist es wichtig, dass dem Tool in der Datei MemoryAnalyzer.ini genug Hauptspeicher und ggf. auch das richtige JDK zugewiesen wird.

Es wird erwartungsgemäß ein angepasstes Eclipse gestartet. Nach dem Öffnen des Dumps arbeitet die IDE einige Zeit. Im „Getting Started Wizzard“ kann zwischen verschiedenen Reporten gewählt werden. Ein guter Einstiegt ist der „Leak Suspects Report“. Nach Auswahl des Reports kannst du den Wizzard beenden und Eclipse sein Arbeit machen lassen. Ja nach Größe des Dumps kann dies etwas dauern.

Um den Speicherverbrauch der einzelnen Datenstrukturen zu sehen, auf einen Teil der angezeigten „Torte“ klicken und „Dominator Tree“ wählen. In der angezeigten Tree Table kann gut geprüft werden wer wieviel Speicher konsumiert.

Fragen und Anmerkungen

Für Fragen und Anmerkungen sendet mir gerne eine eMail. Wegen der DSGVO habe ich derzeit die Kommentarfunktionen abgestellt.

Du hast Fragen oder Anmerkungen? Kontakt: arndt@schoenb.de