Wie man dorthin und Thread-Dumps, Jaspersoft Community-Analyse

Einführung

Ein Java-Thread-Dump ist eine Momentaufnahme, was jeder Thread in der JVM zu einem bestimmten Zeitpunkt zu tun. Jeder Thread in der JVM mit seinem Namen und ID aufgeführt ist, ist es aktuelle Zustand und der Java-Call-Stack zeigt, was überwacht sie gesperrt haben oder wartet auf. Dies ist besonders nützlich, wenn Ihre manchmal Java-Anwendung zu hängen scheint, wenn sie unter Last läuft, wie eine Analyse des Dumps wird zeigen, wo die Fäden fest sind, entweder durch Blockierung oder andere Thread-Konkurrenz.

Wie man ein Thread-Dump erhalten

Auf den meisten Unix-Varianten Kill -3 ein Thread-Dump erzeugen. die Java-Prozess pid Verwendung ps -ef bekommen | grep java. Der Dump ist darauf gerichtet, so stdout in eine Datei umleiten ist notwendig. Seit 1.6 hat die Sun / Oracle JDK und openJDK das jstack Dienstprogramm, das Gleiche zu tun, es von der Kommandozeile aus und in eine Datei umleiten.

Wenn die Anwendung in einem Befehlsfenster gestartet wurde können Sie das Fenster auswählen und STRG + Breakbut die Ausgabe verwenden, wird wahrscheinlich das Fenster überfluten. Jstack ist verfügbar, wenn die Sun / Oracle JDK und openJDK verwenden. Andernfalls psexec.exe verwenden SendSignal.exe auszuführen. Auch, wenn Tomcat als Dienst gestartet wird, ist es notwendig, SendSignal zu verwenden.

Wie viele Thread-Dumps brauche ich

Oft wird ein einzelne Thread-Dump des Problem offenbaren wird, dann ist dies vor allem mit Deadlocks, wo zwei oder mehr Threads für Sperren, die von ihnen erhalten warten. Aber auch in anderen Fällen, wie Fäden aus einer Datenbank auf anderen Prozessen, wie IO warten, werden Sie nicht in der Lage sein, es mit einem einzigen Thread-Dump zu erkennen. In diesem Fall mehr Thread über die Zeit genommen Dumps den gleichen Thread zeigen wartet auf den Prozess während dieser Zeitspanne zu vervollständigen.

Manchmal ist das Problem intermitent, zu zufälligen Zeiten auftreten. Da Sie die Serie von Thread sammeln mögen Dumps, bevor das Problem oben knallt Sie einen cron-Job auf Unix-Systemen erstellen oder den Taskplaner unter Windows verwenden Sie das Skript in regelmäßigen Abständen laufen ein zweistündiges Fenster Thread-Dumps (das Skript zu erhalten jede Dump löscht älter als zwei Stunden Datei, so dass es das Dateisystem nicht auffüllt). Eine Probe Cron-Job wird mit den Skripten enthalten.

Analysieren der Thread-Dumps

Eine detaillierte Beschreibung, wie Faden-Dumps zu analysieren geht über den Rahmen dieses Artikels.

Allerdings gibt es eine Vielzahl von guten Artikeln über das Internet, die den Prozess im Detail expain. Hier sind zwei Quellen, die Ich mag:

In Verbindung stehende Artikel