Mit Themen-Dumps

Dieses Skript gibt die URL der Google-Suche für die Suche erforderlich auf edocs Dokumentation. Dieses Skript gibt das Banner für edocs Dokumentation erforderlich. Dieses Skript gibt die Parameter Google-Suche für die Suche erforderlich auf edocs Dokumentation.







In diesem Kapitel wird beschrieben, wie Oracle JRockit JVM Thread-Dumps erhalten und zu nutzen. Für grundlegende Hintergrundinformationen über Threads und Thread-Synchronisation finden Sie Themen und Schlösser zu verstehen.

Ein Thread-Dump ist eine Momentaufnahme des Zustands aller Threads, die Teil des Verfahrens sind. Der Zustand jeden Faden wird mit einer so genannten Stack-Trace dargestellt, die den Inhalt eines Gewindes des Stapels zeigt. Einige der Themen gehören zu der Java-Anwendung Sie ausführen, während andere JVM Innengewinde sind.

Ein Thread-Dump zeigt Informationen etwa eine Thread-Aktivität der Anwendung, die Sie Probleme und eine bessere Optimierung der Anwendung und JVM Performance diagnostizieren helfen; beispielsweise Thread zeigt Dumps automatisch das Auftreten eines Deadlocks. Deadlocks bringen einige oder alle einer Anwendung zum Stillstand.

Folgende Themen werden in diesem Kapitel behandelt:

Erstellen von Thread-Dumps

Um ein Thread-Dump von einem Prozess zu erstellen, führen Sie einen der folgenden Schritte aus:

  • Drücken Sie Strg-Break, während der Prozess ausgeführt wird (oder durch SIGQUIT zum Prozess auf Linux zu senden).
  • Geben Sie folgende in der Befehlszeile beim Start:
    bin \ jrcmd.exe print_threads

Der Thread-Dump erscheint in der Befehlszeile.

Weitere Informationen über jrcmd und Ctrl-Break-Handler finden Sie Diagnosebefehle ausführen.

Liest das Thema Dumps

Dieser Abschnitt beschreibt die typischen Inhalte eines Thread-Dump von von Anfang an durch ein Beispiel Thread-Dump zu Ende gehen. Zuerst wird ein Beispiel Gewinde dump, aufgeteilt in seine Bestandteile dargestellt sind (siehe Listing 20-1. Listing 20-2. Listing 20-3. Listing 20-4 und 20-5 Listing). Erstens, Informationen über den Haupt-Thread gedruckt werden, dann die ganzen Innengewinde JVM, gefolgt von allen anderen Java-Anwendungs-Threads (falls vorhanden). Schließlich werden Informationen über Verriegelungsketten gedruckt.

Das Beispiel Thread-Dump wird von einem Programm genommen, die drei Fäden erzeugt, die in ein Deadlock schnell gezwungen werden. Die Anwendung Gewinde gewinde 0, Faden-1, und Gewinde 2 entsprechen drei verschiedenen Klassen in der Java-Code.

Der Anfang des Thread-Dump

Der Thread-Dump beginnt mit dem Datum und der Uhrzeit der dump, und die Versionsnummer der JRockit JVM (siehe Listing 20-1).

Auflisten 20-1 Die ersten Informationen eines Thread-Dump

Stack-Trace für Hauptanwendung Thema

20-2 Auflistung zeigt die Stapelüberwachung des Hauptanwendungsthread. Es ist ein Thread Tel.Nr., gefolgt von Informationen über Sperren und eine Spur von dem Stapel des Threads zur Zeit des Thread-Dump.

Auflisten 20-2 Der Haupt-Thread in dem Thread-Dump

Nach dem Namen und anderen Identifizierungsinformationen werden die verschiedenen Statusmeldungen des Hauptthread gedruckt. Der Haupt-Thread in Listing 20-2 ist ein laufender Threads (alive), wird entweder die Ausführung JVM internen Code oder benutzerdefinierten JNI-Code (in Muttersprache), und es wird zur Zeit für ein Objekt wartet freigegeben werden (wartet). Wenn ein Thread zu einer Meldung auf eine Sperre wartet (von Object.wait () aufgerufen wird), wird dies an der Spitze des Stack-Trace als Warten auf Benachrichtigung über angegeben.

Schlösser und Sperrketten

Für jeden Thread, druckt die JRockit JVM die folgenden Informationen:







  • Wenn der Thread eine Sperre zu nehmen versucht (einen synchronisierten Block eingeben), aber die Sperre bereits von einem anderen Thread gehalten wird, wird dies an der Spitze der Stack-Trace angezeigt, als „Blockiert versuchen zu erhalten zu sperren“.
  • Wenn der Faden zu einer Meldung auf eine Sperre wartet (von Object.wait () aufgerufen wird), wird dies an der Spitze des Stack-Trace als „Warten auf Benachrichtigung“ angezeigt.
  • Wenn der Faden alle Sperren gefunden hat, ist dies in der Stapelüberwachung dargestellt. Nach einer Zeile in der Stapelüberwachung einen Funktionsaufruf der Beschreibung ist eine Liste der durch den Faden aufgenommen Sperren in dieser Funktion. Dies wird beschrieben als ^ - Haltesperre (wo die ^ - dient als Anzeige, dass das Schloss in der Funktion über der Linie mit der Sperre geschrieben genommen wird).

Die Semantik für Warte (zur Meldung) auf einem Objekt in Java ist etwas komplex. Zuerst einen synchronisierten Block eingeben, müssen Sie die Sperre für das Objekt ausgeführt, und dann warten Sie anrufen () auf das Objekt. In den Warteverfahren wird die Verriegelung gelöst, bevor der Thread geht tatsächlich für eine Meldung in dem Schlaf zu warten. Wenn es eine Benachrichtigung erhält, warten, bis das Schloss wieder nimmt vor der Rückkehr. Also, wenn ein Thread eine Sperre getroffen hat, und wartet (zur Meldung) auf der Sperre, die Zeile in der Stapelüberwachung, die die Sperre beschreibt, wenn genommen wurde, wird nicht wie dargestellt „Haltesperre“, sondern als „freigegeben Schloß während des Wartens .“

Präsentation von Locks Out of Order

Die Linien mit den Sperrinformationen möglicherweise nicht immer richtig sein, aufgrund Compiler-Optimierungen. Das bedeutet zweierlei:

  • Wenn ein Thread, in der gleichen Funktion, mit einem ersten und dann Sperre B nimmt sperren, in dem die Reihenfolge, wie sie gedruckt sind, ist nicht spezifiziert.
  • Wenn ein Thread, in Methode foo () ruft Methode bar (). und nimmt eine Sperre A in bar (). das Schloss kann als genommen in foo gedruckt werden ().

Normalerweise sollte dies kein Problem sein. Die Reihenfolge der Sperrlinien sollten niemals aus ihrer korrekten Position viel bewegen. Auch Schloss Linien werden niemals fehlen: Sie können sicher sein, dass alle Schlösser an einem Faden genommen werden in dem Thread-Dump gezeigt.

JVM Interne Themen

Listing 20-3 Der erste und der letzte Thread in einer Liste von JVM Innengewinde

Wie Sie sehen können, Informationen über Sperren und Stack-Traces sind nicht für die JVM Innengewinde in Listing 20-3 gedruckt. Dies ist die Standardeinstellung.

Wenn Sie Stack-Traces für die JVM Innengewinde sehen wollen, dann verwenden Sie den Parameter nativestack = true, wenn Sie die print_threads Handler senden. In der Befehlszeile, schreiben Sie die folgenden Schritte aus:

bin \ jrcmd.exe print_threads nativestack = true

Andere Java Application Threads

Listing 20-4 Zusätzliche Anwendungs-Threads

Sperrketten

Ein herausragendes Merkmal der JRockit JVM ist, dass es automatisch Deadlock erkennt, blockiert und offene Sicherungsketten unter dem laufenden Threads. Die Analyse in Listing 20-5 stellt die alle Verriegelungsketten durch die Gewinde T1, T2, T3, T4 und T5 angelegt. Diese Informationen können zum Abstimmen verwendet werden und Java-Code zu beheben.

Listing 20-5 Deadlocks und blockiert Sicherungsketten

Thread-Status in Thread Dumps

Dieser Abschnitt beschreibt die verschiedenen Zustände oder Zustände ein Thread in einem Thread-Dump zeigen kann. Es gibt drei Arten von Zuständen:

Das Leben Staaten

Tabelle 20-1 beschreibt die Lebenszustände ein Thread in einem Thread-Dump zeigen kann.

spezielle Staaten

Tabelle 20-3 beschreibt die speziellen Zustände ein Thread in einem Thread-Dump zeigen kann. Beachten Sie, dass alle diese Staaten nicht gegenseitig ausschließen.

Fehlerbehebung mit Gewinde Dumps

Dieser Abschnitt enthält Informationen darüber, wie Thread für die Fehlersuche und Diagnose verwenden Dumps.

Um Thread-Dumps zur Fehlerbehebung verwenden, über Erkennung Deadlocks, müssen Sie mehr nehmen Thread-Dumps aus dem gleichen Prozess. Wenn Sie jedoch lange Zeit Analyse des Verhaltens tun wollen, werden Sie wahrscheinlich mehr durch die Kombination von gelegentlichem Faden geholfen werden Dumps mit anderen Diagnosetool, wie der JRockit Runtime Analyzer, der Teil von Oracle JRockit Mission Control (siehe Verwenden von Oracle JRockit Mission Control ist Tools für weitere Informationen).

Erkennen von Deadlocks

Die Oracle JRockit JVM analysiert automatisch die Thread-Dump Information und erkennt, ob es eine kreisförmige (Deadlock) oder blockierte Verriegelungsketten vorhanden.

Detecting Verarbeitung Bottlenecks

Seit mehr als Deadlocks in Threads zu erfassen, müssen Sie mehr aufeinander folgendes Thread-Dumps machen. Auf diese Weise können Sie das Auftreten des Anstoßes erkennen, wo mehrere Threads versuchen, die gleiche Sperre zu erhalten. Contention könnte lange offene Sicherungsketten schaffen, die zwar nicht blockiert, wird die Leistung beeinträchtigen.

Wenn Sie (in einer Reihe von aufeinander folgenden Thread-Dumps) entdecken, dass ein oder mehrere Threads in Ihrer Anwendung vorübergehend auf eine Sperre stecken wartet freigegeben werden, dann könnten Sie Grund haben, um den Code von Ihrer Java-Anwendung überblicken, wenn die Synchronisation zu sehen (Serialisierung) notwendig ist, oder wenn die Fäden anders organisiert werden.

Anzeigen der Laufzeitprofil einer Anwendung

Indem mehrere aufeinander folgende Thread-Dumps, können Sie schnell einen Überblick, welche Teile Ihrer Java-Anwendung erhalten, die am stärksten verwendet werden. Allerdings sollten Sie die Registerkarte Threads in JRockit Management Console, um weitere detaillierte Informationen über die Arbeitsbelastung auf den verschiedenen Teilen der Anwendung konsultieren.







In Verbindung stehende Artikel