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.