28. November 2007

Heap Dump erstellen und analysieren

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

9. November 2007

Garbage Collection

In der Sun JVM gibt es zwei Modi bei der Garbage Collection
  • Minor
    • Implementierung
      • "Copy"
    • läuft relativ schnell und kann auch oft laufen
    • nur in den Memory Pools "Eden" und "Survivor"
  • Major
    • 2 Implementierungen
      • "Mark-Sweep-Compact"
      • "PS Scavenge"
    • kostspielig, läuft langsam. Alle laufende Threads werden währrend er läuft angehalten.
    • in den Memory Pools "Eden", "Survivor", "Tenured" und "Permanent"

Für optimale Performance sollte die Major GC selten laufen.

8. November 2007

Linktip: Hibernate Issue Tracking

Auf dieser Seite werden Bugs,Lösungen, Worksarounds, etc. für Hibernate aufgenommen. Sie bietet auch eine Suchfunktionalität:

http://opensource.atlassian.com/projects/hibernate/secure/QuickSearch.jspa