seeseekey.net - Invictus Deus Ex Machina

Manchmal kommt es vor das man eine Java Applikation geschrieben hat, welche aus irgendeinem Grund mehr Speicher verbraucht als sie sollte. Im schlimmsten Fall führt dies zu einem OutOfMemory-Error. Möchte man dem Übeltäter auf die Spur kommen, kann man im ersten Schritt einen Heap Dump bei einem OutOfMemory-Error vornehmen. Dazu fügt man den VM Optionen der JVM den Parameter:

-XX:+HeapDumpOnOutOfMemoryError

hinzu. Dieser Parameter sorgt dafür, das im Falle eines OutOfMemory-Error, ein Dump des Heaps auf der Festplatte landet. Das Problem an diesem Dump ist allerdings, das er sich händisch schlecht auswerten lässt. Abhilfe schafft hier das freie Werkzeug Eclipse Memory Analyser.

Eclipse Memory Analyser

Eclipse Memory Analyser

Mit diesem ist es möglich den Heap Dump einzulesen und anschließend unter Zuhilfenahme der Analysefunktion dem Memory Leak auf die die Spur zu kommen. Bezogen werden kann das Tool über die offizielle Webseite. Lizenziert ist der Memory Analyser unter der Eclipse Public License und damit freie Software.

2 Kommentare

  1. AnonymerFeigling

    Mir tut jedes Mal das Herz weh, wenn ich sehe, dass jemand etwas von OutOfMemory-Exceptions schreibt. Dabei ist die Einteilung in Java doch so klar: Ausnahmen, die von normalen Programmen nicht abgefangen werden sollten, wie z.B. Speichermangel, werden durch Errors modelliert (wie z.B. der OutOfMemoryError), alles andere durch Exceptions. Und der Überbegriff (bzw. die Superklasse) für Errors und Exceptions ist Throwable.

    Ansonsten ist noch interessant zu wissen, dass der Eclipse Memory Analyzer sowohl das HPROF-Format (Hotspot und Derivate) als auch Heap-Dump-Formate der IBM VMs (durch kostenloses Plugin) unterstützt.

    Antworten

    • Du hast vollkommen recht, was das anbelangt – ich habe das mal korrigiert. Ich bin sonst meistens mit C# und .NET unterwegs, da gewöhnt man sich daran, das alles eine Exception ist 😉

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.