Ich verwende den kill -3
Befehl, um den Thread-Dump der JVM unter Unix anzuzeigen. Aber wo finde ich die Ausgabe dieses kill
Befehls? Ich bin verloren!!
java
multithreading
dump
javanerd
quelle
quelle
Antworten:
Alternativ können Sie jstack (im Lieferumfang von JDK enthalten) verwenden, um einen Thread-Dump zu erstellen und die Ausgabe zu schreiben, wo immer Sie möchten. Ist das in einer Unix-Umgebung nicht verfügbar?
quelle
Der Thread-Dump wird von der VM, auf der Sie den ausgeführt haben, in das System geschrieben
kill -3
. Wenn Sie die Konsolenausgabe der JVM in eine Datei umleiten, befindet sich der Thread-Dump in dieser Datei. Wenn die JVM in einer offenen Konsole ausgeführt wird, wird der Thread-Dump in der Konsole angezeigt.quelle
Es gibt eine Möglichkeit, die Ausgabe des JVM-Thread-Dumps beim Unterbrechungssignal in eine separate Datei mit der Diagnoseoption LogVMOutput umzuleiten :
quelle
Mit Java 8 im Bild
jcmd
ist der bevorzugte Ansatz.Es folgt der Ausschnitt aus der Oracle-Dokumentation :
Mit der Veröffentlichung von JDK 8 wurden Java Mission Control, Java Flight Recorder und das Dienstprogramm jcmd zur Diagnose von Problemen mit JVM- und Java-Anwendungen eingeführt. Es wird empfohlen, das neueste Dienstprogramm jcmd anstelle des vorherigen Dienstprogramms jstack zu verwenden, um die Diagnose zu verbessern und den Leistungsaufwand zu verringern.
Der Versand mit der Anwendung kann jedoch Auswirkungen auf die Lizenzierung haben, bei denen ich mir nicht sicher bin.
quelle
jcmd
keine Verbindung zum Windows-Dienst hergestellt werden,com.sun.tools.attach.AttachNotSupportedException: Insufficient memory or insufficient privileges to attach
solange diesjstack -F
erfolgreich ist: stackoverflow.com/questions/1197912/…An derselben Stelle, an der sich das Standardout der JVM befindet. Wenn Sie einen Tomcat-Server haben, ist dies die
catalina_(date).out
Datei.quelle
Bei Verwendung von kill -3 sollte der Thread-Dump in der Standardausgabe angezeigt werden. Die meisten Anwendungsserver schreiben die Standardausgabe in eine separate Datei. Sie sollten es dort finden, wenn Sie kill -3 verwenden. Es gibt mehrere Möglichkeiten, Thread-Dumps abzurufen:
kill -3 <PID>
: Gibt die Ausgabe an die Standardausgabe weiter.Für Hotspot-VMs können wir auch einen
jstack
Befehl verwenden, um einen Thread-Dump zu generieren. Es ist ein Teil des JDK. Die Syntax lautet wie folgt:quelle
kill -3 <PID>
sollte die JVM nicht töten. Welche Art von Java-App suchen Sie?In Jboss können Sie Folgendes ausführen
Dadurch wird Ihre Ausgabe / Ihr Threadump an die im obigen Befehl angegebene Dateikonsole umgeleitet.
quelle
quelle
Schritte, die Sie befolgen sollten, wenn Sie den Thread-Dump Ihres StandAlone Java-Prozesses möchten
Schritt 1: Rufen Sie die Prozess-ID für das Shell-Skript ab, das das Java-Programm aufruft
Schritt 2: Rufen Sie die Prozess-ID für das untergeordnete Element ab, das von runABCD aufgerufen wurde. Verwenden Sie die oben angegebene PID, um die Kinder zu erhalten.
Schritt 3: Holen Sie sich den JSTACK für den jeweiligen Prozess. Rufen Sie die Prozess-ID Ihres XYSServer-Prozesses ab. dh 8536
quelle