Thread -Dumps können uns helfen, CPU -Peaks, Deadlocks, Speicherausnahmen, langsame Anwendungsreaktion, lange Reaktionszeit und andere Systemprobleme zu bestimmen. Einige Online -Analysetools wie http://fastthread.io/ können uns auch helfen, Probleme zu analysieren und zu lokalisieren. Diese Tools erfordern jedoch eine Dump -Datei. Daher habe ich in diesem Artikel die Möglichkeiten zusammengefasst, Java Thread Dumps -Dateien in 7 zu schnappen.
1. JStack
JStack ist ein effektives Befehlszeilen-Tool für Kriech-Thread-Dump-Dateien. Es befindet sich im Ordner Bin (jdk_home/bin) im JDK -Verzeichnis. Das Folgende ist der Befehl zum Crawl -Dump -Dateien:
JStack -l <pid>> <Datei -Path>
veranschaulichen:
PID: Die Prozess -ID der Java -Anwendung, dh die Bewerbungsprozess -ID, die die Dump -Datei kriechen muss.
Dateiweg: Der Pfad zum Speichern der Dump-Datei.
Beispiel:
JStack -l 37320> /opt/tmp/threaddump.txt
Das obige Beispiel zeigt, wie JStack verwendet wird, um Dump -Dateien in das Verzeichnis /opt/tmp/threaddump.txt zu generieren.
Ab Java5 wurde JStack in JDK aufgenommen. Wenn Sie die alte Version von JDK verwenden, sollten Sie in Betracht ziehen, andere Methoden anzuwenden.
2. Kill -3
In Bezug auf Sicherheitsüberlegungen enthalten einige Maschinen in Produktionsumgebungen nur JRE -Umgebungen, sodass das JStack -Tool nicht verwendet werden kann. In diesem Fall können wir Kill -3 verwenden:
kill -3 <pid>
veranschaulichen:
PID: Die Prozess -ID der Java -Anwendung, dh die Bewerbungsprozess -ID, die die Dump -Datei kriechen muss.
Beispiel:
kill -3 37320
Bei der Verwendung von Kill -3 zum Generieren von Dump -Dateien werden die Dump -Dateien in den Standardfehlerstrom ausgegeben. Wenn Ihre Anwendung auf Tomcat ausgeführt wird, wird der Dump -Inhalt an die Datei <tomcat_home> /logs/catalina.out gesendet.
3.. Jvisualvm
Java VisualVM ist ein grafisches Schnittstellen -Tool, mit dem JVM -Informationen bereitgestellt werden können. Es befindet sich in der Datei jdk_home/bin/jvisualvm.exe. Beginnend mit JDK6 Update7 ist es im JDK enthalten.
Führen Sie JvisualVM aus und im linken Bereich (wie in der Abbildung unten gezeigt) werden die laufenden JVM -Informationen aufgeführt. Dieses Tool kann Dump -Dateien von lokalen oder remote laufenden JVMS schnappen.
Klicken Sie in der obigen Abbildung auf die Schaltfläche Thread Dump entsprechend dem Prozessnamen, um eine Dump -Datei zu generieren, wie in der Abbildung unten gezeigt:
4. JMC
Java Mission Control (JMC) ist ein Tool, mit dem Daten aus einer lokalen oder Produktionsumgebung erfasst und analysiert werden können. Beginnend mit Oracle JDK 7 Update 40 ist es im JDK enthalten, das Dump -Dateien aus dem JVM generieren kann. JMC befindet sich in der Datei jdk_home/bin/jmc.exe:
Nach dem Ausführen des Tools können Sie den Java -Prozess lokal ausgeführt werden, der auch an eine Remote -Maschine angeschlossen werden kann. Doppelklicken Sie auf den Java-Prozess, den Sie generieren möchten, die Dump-Datei, klicken Sie auf Flugrekorder und sehen Sie das folgende Dialogfeld an:
Im Dropdown-Feld Thread Dump können Sie das Zeitintervall zum Generieren der Dump-Datei auswählen. Im obigen Beispiel wird alle 60 Sekunden eine Dump -Datei generiert. Starten Sie nach der Auswahl von Flight Recorder den Inhalt der Dump -Datei im Threads -Bereich:
5. Windows (Strg + Break)
Diese Methode ist nur unter Windows -Betriebssystemen gültig:
Wählen Sie die Befehlszeile im Konsolenfenster aus
Drücken Sie den Befehl "Strg + Break" im Befehlszeilenfenster
Anschließend wird eine Dump -Datei generiert und der Inhalt der Dump -Datei wird im Befehlszeilenfenster gedruckt.
Anmerkung 1: Es gibt mehrere Notizbücher (z. B. die Lenovo T -Serie), die die "Break" -Taste abgesagt haben. In diesem Fall müssen Sie für Schlüssel googeln, die ähnliche Funktionen wie die Break -Taste haben, und ich fand, dass die Taste "Funktionstaste" B "die gleiche Break -Taste entspricht, sodass ich die Taste" Ctrl + FN + B "zur Generierung der Dump -Datei verwendet habe.
Hinweis 2: Ein Nachteil der Verwendung der obigen Methode besteht darin, dass der Inhalt der Dump -Datei in die Konsole gedruckt wird. Wenn es keine Dump -Datei gibt, ist es für uns schwierig, Analyse -Tools wie http://fashread.io zur Analyse der Dump -Datei zu verwenden. Daher können Sie den folgenden Befehl verwenden, um den Inhalt der Dump -Datei in eine Textdatei auszugeben. Ihr Anwendungsname ist beispielsweise SampleTheadProgram, sodass die üblichen Befehle wie folgt sind:
java -classpath . SampleThreadProgram
Der Befehl zum Ausgabe des Inhalts der Dump -Datei in eine Textdatei lautet wie folgt:
java -classpath . SampleThreadProgram > C:/workspace/threadDump.txt 2>&1
Nachdem Sie die Taste "Strg + Break" gedrückt haben, wird die Dump -Datei in C: /workspace/Threaddump.txt gespeichert.
6. Threadmxbean
Beginnend mit JDK 1.5 wurde ThreadMxBean eingeführt. Dies ist die Verwaltungsschnittstelle des JVM. Mit dieser Schnittstelle benötigen Sie nur eine kleine Menge Code, um Dump -Dateien zu generieren. Im Folgenden ist die Hauptimplementierung der Verwendung von ThreadMxBean zum Generieren von Dump -Dateien:
public void birthreaddump () {ThreadMxBean threadMxBean = ManagementFactory.Gethreadmxbean (); für (threadInfo ti: threadmxbean.dumpallThreads (true, true)) {System.out.print (ti.toString ()); }}7. APM Tool App Dynamics
Einige Tools zur Überwachung der Anwendungsleistung bieten die Funktion des Generierens von Dump -Dateien. Wenn Sie die App -Dynamik verwenden, um Ihre Anwendung zu überwachen, sind folgende Schritte zum Generieren von Dump -Dateien:
Öffnen Sie das Fenster Aktion erstellen und wählen Sie Diagnostik-> Einen Thread-Dump im Aktionsfenster erstellen.
Geben Sie den Aktionsnamen, die Anzahl der Dump -Dateien ein, um zu kriechen, und das Zeitintervall (Millisekunden) für Crawling -Dump -Dateien.
Wenn Sie einige Aktionen ausführen möchten, bevor die Krabbel -Dump -Aktion beginnt, können Sie die Erfordernisse des Kontrollkästchens ausführen und die E -Mail -Adresse der Einzelperson oder Gruppe eingeben.
Klicken Sie auf OK.
Zusammenfassen
Obwohl ich 7 Möglichkeiten zum früheren Auflagen von Dump -Dateien aufgelistet habe, sind IMHO, JStack und Kill -3 aus den folgenden Gründen die beste Wahl:
A. Einfach, einfach zu implementieren;
B. Allgemein: In den meisten Fällen unabhängig vom Betriebssystemtyp, Java -Anbieter, JVM -Version usw.