Vor JDK 1.6 kann ein HeapDump nur im Fehlerfall
über folgende VM-Argumente
geschrieben werden:
-XX:HeapDumpPath=path -XX:HeapDumpOnOutOfMemoryError
Nachtrag (Danke an Markus Kohler, siehe Kommentar): Mit JDK 1.4 und JDK 1.5 gibt es in den neueren Versionen auch die Option
-XX:+HeapDumpOnCtrlBreak
Das ermöglicht beim Drücken von "Ctrl" + "Break" einen HeapDump in das Ausführungsverzeichnis zu schreiben.
Die HeapDumpPath hat hier keine Auswirkung.
Ab JDK 1.6 kann über folgendes VM-Argument ein HeapDump geschrieben werden.
Das Schreiben findet aber erst nach Beendung des Programms statt.
-Xrunhprof:format=b,file=mysnapsot.hprof
Alternativ kann man auch zur Laufzeit eines Java-Programms einen
Heap-Dump erzeugen über das Tool jmap im Bin-Verzeichnis des SDK:
jmap -dump:format=b,file=snapshot2.hprof <pid>
Eine weitere Möglichkeit bietet JMX. In der MBean
com.sun.management:type=HotSpotDiagnostic
gibt es die Methode
dumpHeap(String , boolean )
Über diese kann ebenfalls im laufenden Betrieb ein Dump erstellt werden.
Analysiert werden kann der Dump dann z.B. über
jhat.exe
mysnapsot.hprof
(im JDK-Bin-Verzeichnis) Startet per Default einen WebServer auf Port 7000.
Den Dump kann man sich im Browser unter der Adresse http://localhost:7000 anschauen
den kostenlosen SAP Memory Analyzer - eine komfortabele Oberfläche auf Basis Eclipse RCP
Beispiel: Tomcat Session
org.apache.catalina.session.StandardSession
1 Kommentar:
Hallo Rainer,
Unter JDK 1.4 (und bei 1.5 geht es womöglich mittlerweile auch) kann man die HeapDumpOnCtrlBreak Option setzen. Siehe meinen Blogeintrag hierbr/>
Gruss,
Markus
Kommentar veröffentlichen