Nehmen Sie Thread-Dumps von einer JVM
Ein Thread-Dump ist eine Liste aller Java-Threads, die derzeit aktiv in einer Java Virtual Machine (JVM) sind.
Es gibt mehr Möglichkeiten Thread-Dumps von einer JVM zu nehmen. Es ist sehr zu mehr als 1 Thread-Dump in Anspruch zu nehmen. Eine gute Praxis ist, 10 Faden Dumps in einem regelmäßigen Abstand zu nehmen (beispielsweise ein Thread-Dump alle zehn Sekunden).
Schritt 1: Holen Sie sich das PID Ihrer Java-Prozess
Das erste Stück von Informationen müssen Sie in der Lage sein, ein Thread-Dump ist Ihr Java-Prozess PID zu erhalten.
Die Java JDK Schiffe mit dem JPS-Befehl, der all Java-Prozess-IDs auflistet. Sie können diesen Befehl wie folgt ausführen:
JPS -l 70660 sun.tools.jps.Jps 70305
Wenn dies nicht funktioniert, oder Sie können immer noch nicht Ihren Java-Prozess finden, (Pfad nicht gesetzt ist, JDK nicht installiert ist, oder ältere Java-Version), die Verwendung
- UNIX, Linux und Mac OS X: ps -el | grep java
- Fenster: Drücken Sie Strg + Shift + Esc, um den Task-Manager zu öffnen und die PID des Java-Prozess finden
Schritt 2: Fordern Sie eine Thread-Dump von der JVM
Wenn / verfügbar installiert ist, empfehlen wir das jstack-Tool. Er druckt Thread zu dem Befehlszeilenkonsole Dumps.
Um ein Thread-Dump mit jstack zu erhalten, führen Sie den folgenden Befehl ein:
jstack -l
Sie können die Ausgabe in Folge Thread über die Konsole Ausgabe in eine Datei umleiten Dumps / anhängen Richtlinie:
jstack -l
- Das jstack Tool ist seit JDK 1.5 (für JVM unter Windows, ist es in einigen Versionen von JDK 1.5 und JDK 1.6 nur verfügbar ist).
- jstack funktioniert auch, wenn der -Xrs Jvm Parameter aktiviert ist
- Es ist nicht möglich, das jstack Tool von JDK 1.6 zu verwenden threaddumps von einem Prozess auf JDK 1.5 laufen zu nehmen.
- Unter Linux und UNIX müssen Sie den Befehl als Benutzer auszuführen, der den Java-Prozess besitzt:
sudo -ujstack -l
(sollte mit der ID des Benutzers ersetzt werden, dass die Java-Prozess läuft) - In Windows, wenn Sie laufen jstack und den Fehler „nicht genügend Speicher verfügbar, um diesen Befehl zu verarbeiten“, dann müssen Sie jstack als die Windows-System Benutzer oder den Benutzer ausführen, der den Java-Prozess besitzt. Sie können dies tun, indem psexec verwendet, die Sie hier herunterladen können. So führen jstack als Benutzer SYSTEM, verwenden Sie einen Befehl wie folgt aus:
psexec es jstack>> threaddumps.log
Wenn Sie nicht in der Lage sind psexec auf dem Server zu installieren, dann können Sie eine .bat-Datei mit dem Befehl erstellen und führen Sie es den Windows-Taskplaner (als einen anderen Benutzer). - Manchmal ist es notwendig, die Option -J-d64 auf 64-Bit-Systemen, beispielsweise hinzufügen:
jstack -J-d64 -l>> threaddumps.log
jstack Skript
Hier ist ein Skript, von eclipse.org genommen, die eine Reihe von Faden wird Dumps mit jstack. Es nimmt auch die Thread-Ebene CPU-Auslastung als auch Top-Befehl.
#! / Bin / bash
if [$ # -eq 0]; dann
echo> -2 „Verwendung: jstackSeries
echo> -2 "Defaults: count = 10, delay = 0,5 (Sekunden)"
exit 1
fi
pid = $ 1 # erforderlich
user = $ 2 # erforderlich
count = $ # standardmäßig 10 mal
Verzögerung = $ # standardmäßig auf 0,5 Sekunden
während [count $ -gt 0]
machen
Sudo -u $ user oben -H -B -N1 -p pid $> top $ $ pid (Datum +% H% M% S% N).. -
Sudo -u $ user jstack -l $ pid> jstack. $ pid. $ (Datum +% H% M% S% N)
Schlaf $ Verzögerung
lassen count--
echo -n ""
erledigt
führen Sie es einfach wie folgt aus:
sh jstackSeries.sh [pid] [cq5serveruser] [count] [Pause]
Beispielsweise:
sh jstackSeries.sh 1234 cq5serveruser 10 3
- 1234 ist die pid des Java-Prozess
- cq5serveruser ist der Linux- oder UNIX-Benutzer, dass der Java-Prozess läuft als
- 10 ist, wie viele Fäden nehmen Dumps
- 3 ist die Verzögerung zwischen jedem Dump
Thread-Dump-Tool für Adobe Experience Manager
Wenn Sie Adobe Experience Manager-Produkt verwenden, dann können Sie dieses Tool installieren zum Erzeugen von Thread-Dumps eine einfache Benutzeroberfläche haben.
Alternative Möglichkeiten, um ein Thread-Dump zu erhalten
Wenn das jstack Werkzeug nicht verfügbar ist Ihnen dann können Sie Thread-Dumps wie folgt ablaufen:
Hinweis: Einige Werkzeuge können nicht Faden von der JVM-Dumps, wenn die Kommandozeilenparameter -Xrs aktiviert ist. Wenn Sie Probleme Thread nehmen Dumps dann sehen Sie bitte, ob diese Option aktiviert ist.
UNIX, Mac OS X und Linux (JDK 1.4 oder kleinere Version)
Unter UNIX, Mac OS X und Linux können Sie ein VERL Signal an den Java-Prozess senden es zur Ausgabe an der Standardausgabe ein Thread-Dump zu erzählen.
- Download javadump.exe (im Anhang unten).
- Starten Sie die JVM mit diesen drei Argumenten (sie in der richtigen Reihenfolge sein muss):
-XX: + UnlockDiagnosticVMOptions -XX: + LogVMOutput -XX: Logfile = C: mpjvmoutput.log - Drücken Sie Strg + Shift + Esc, um den Task-Manager zu öffnen.
- Finden Sie die PID des Java-Prozess.
- Von der Befehlszeile ausführen
javadump.exe [pid] - Das Thread-Dump wird in der jvmoutput.log Datei in Schritt erwähnt erscheint 2.
Holen Sie sich ein Thread-Dump von jconsole Werkzeug, durch ein Plugin: [0]
Hier ist, wie Sie ein Thread-Dump anfordern können:
Gilt für
Alle Adobe Produkte in einer JVM läuft