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 >> threaddumps.log

  • 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 -u jstack -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.

  1. Download javadump.exe (im Anhang unten).
  2. Starten Sie die JVM mit diesen drei Argumenten (sie in der richtigen Reihenfolge sein muss):
    -XX: + UnlockDiagnosticVMOptions -XX: + LogVMOutput -XX: Logfile = C: mpjvmoutput.log
  3. Drücken Sie Strg + Shift + Esc, um den Task-Manager zu öffnen.
  4. Finden Sie die PID des Java-Prozess.
  5. Von der Befehlszeile ausführen
    javadump.exe [pid]
  6. 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







In Verbindung stehende Artikel