JStack Definition:
JStack ist ein Stack Trace -Tool, das mit Java -Virtual -Maschinen ausgestattet ist.
Grundlegende Einführung:
JStack wird verwendet, um einen Thread -Schnappschuss aus der aktuellen Zeit der virtuellen Java -Maschine zu generieren. Thread -Schnappschüsse sind eine Sammlung von Method -Stapeln, die jeder Thread in der aktuellen Java -Virtual -Maschine ausführt. Der Hauptzweck bei der Erzeugung von Thread-Snapshots besteht darin, die Gründe für langfristige Pausen von Fäden wie Deadlocks zwischen Threads, toten Schleifen und langfristigem Warten zu lokalisieren, die durch die Anforderung externer Ressourcen verursacht werden.
Wenn ein Thread pausiert, können Sie den Anrufstapel jedes Threads über JStack überprüfen und wissen, was der nicht reagierende Thread im Hintergrund tut oder auf welche Ressourcen er wartet.
Befehlsformat:
JStack [Option] PID
Grundparameter:
-F Kraftdruckstapelinformationen Wenn 'JStack [-l] pid' nicht entsprechend ist
-l lange Liste. Drucken Sie zusätzliche Informationen über die Sperre, z. B. die Synchronizer -Liste der eigenen Synchronisation von Java.util.Concurrent.
-M Drucken Sie alle Stapelinformationen von Java und nativen C/C ++ -Frameworks. -h | -Help Druckhilfeinformationen
PID Java -Prozess -ID, die gedruckte Konfigurationsinformationen werden müssen, können Sie das JPS -Tool zum Abfragen verwenden
Fall
C:/Users/Administrator>jstack 5516Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode): "DestroyJavaVM" prio=6 tid=0x00000000000027d800 nid=0x1bb0 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Thread -1" Prio = 6 TID = 0x00000000000CB13800 NID = 0x19AC Warten auf den Monitoreintrag [0x0000000000d67f000] Java.lang.Thread.State: Blockiert (auf Objektmonitor) bei Thread.deadlockdemo $ 2.run (toterLockdemo.java.35) - Warte auf Lock <0x00000000000000000000000000000000000000000Sound5.5.java:35) - Warte auf Lock <0x00000000000000000000000000000000000000000000000000000Sound5.5.java.35) - Warte auf Lock; (a java.lang.String) - gesperrt <0x00000007d5a9beb8> (a java.lang.String) bei Java.lang.Thread.run (Unbekannte Quelle) "Thread -0" PRIO = 6 TID = 0x000000000CB0E800 NID = 0x6BC wartet auf Monitor -Einträge [0x000000000 us800000). java.lang.Thread.State: BLOCKED (on object monitor) at thread.DeadLockDemo$1.run(DeadLockDemo.java:21) - waiting to lock <0x00000007d5a9beb8> (a java.lang.String) - locked <0x00000007d5a9be88> (a java.lang.String) at java.lang.thread.run (unbekannte Quelle)
Hier wird ein Deadlock -Code ausgeführt, wodurch beide Threads im Programm darauf warten, dass die andere Partei das Schloss veröffentlicht, wodurch das Programm abgestimmt wird.
Aus diesem Code ist deutlich zu erkennen, dass Zeile 35 und Zeile 21 in Deadlockdemo.class blockiert sind, und dann müssen wir diese Funktion optimieren.
PS: Im tatsächlichen Betrieb reichen die Dump -Informationen häufig nicht aus, um das Problem zu bestätigen. Es wird empfohlen, drei Dump -Informationen zu generieren. Wenn jeder Dump auf dasselbe Problem zeigt, bestimmen wir die Typizität des Problems.
Zusammenfassen
In diesem Artikel geht es um die Analyse von JStack- und Thread -Dump -Instanzen. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!