Java-Heap dumpen

Um Speicherprobleme einer Java-Anwendung zu analysieren, kann es hilfreich sein, sich den Inhalt des Heaps anzuschauen. Dazu muss man ihn mittels jmap in eine Datei schreiben und kann ihn dann anschließend mit jhat oder dem MAT Plugin für Eclipse untersuchen.

Zuerst muss man auf den User wechseln, unter dem die Java VM läuft:

$ su javauser

Nun muss man die PID des Java-Prozesses raussuchen, den man untersuchen möchte:

$ jps -m -l

Dieses Programm ist teil des Java JDK und listet alle laufenden Java-Prozesse auf. Nun kann man die gefundene PID nehmen und den Inhalt des Heap in eine Datei dumpen:

$ jmap -dump:format=b,file=/path/to/dumpfile.bin -J-d64 PID

Der Parameter -J-d64 ist nur auf 64Bit-Systemen nötig.

Das so erzeugte Dump-File kann man nun entweder in Eclipse öffnen oder aber man startet jhat und kann dann über den Webbrowser den Heap durchsuchen:

$ jhat -port 7000 /path/to/dumpfile.bin

Nun kann man unter http://localhost:7000 den Inhalt des Dumps durchsuchen. Die Eclipse-Erweiterung ist allerdings um einiges komfortabler.