Java System hängt: Thread Dumps

System hängt: Thread Dumps

Was tun, wenn ein Java-Programm hängen bleibt, also nichts mehr tut?
Dieses Problem kann durch ungeschickte Thread-Programmierung, insbesondere bei Servern, auftreten.
Ursache sind zumeist falsch gewählte synchronized-Blöcke.

Ein ThreadDump zeigt an, welche Threads in einem aktuellen JAVA-Programm ausgeführt werden und an welcher Stelle (Stacktrace) diese gerade stehen.
Wenn sich ein System aufhängt, also nichts mehr tut, so kann dies daran liegen, daß sich zwei oder mehrere synchronized-Blöcke gegenseitig blockieren.
Um diese Stellen im Code zu finden, können ThreadDumps hilfreich sein. Zieht man mehrere solcher Thread Dumps, so erkennt man vielleicht, daß einige Threads immer an der selben Stelle stehen. Diese Stellen sind dann die Top-Kandidaten für die Synchronisations-Fehlersuche.

Wie erzeugt man einen Threaddump

Wenn Sie eine Konsole haben, in der das JAVA-Programm abläuft, so können Sie einen Thread Dump nach stderr mit STRG-PAUSE erzeugen.
Haben Sie hingegen keine Konsole, so benötigen Sie die Prozeß-ID (PID) der Java virtual machine. Senden Sie dann ein kill -9 an diesen Prozeß (kill -9 ). Die JVM erzeugt dann eine Datei mit dem Thread dump. Der Dateiname wird vom System vergeben und die Datei im aktuellen Verzeichnis abgelegt. Im Zweifel einfach nach neu erstellten Dateien suchen.



Nach oben, Inhaltsverzeichnis, Impressum Admin: Artikel editieren