2010-01-14 8 views
14

Wenn ich einen Befehl kill -3 <pid> an mein Java-Programm ausgabe, generiert es den Thread-Dump auf der Konsole. Wie leite ich das in eine Datei um?Speicherort für JVM-Thread-Dump

+0

OK danke Leute. Ich habe es herausgefunden. Der Befehl kill -3 veranlasste meinen jvm, auf STDOUT zu schreiben. Ich habe dies gerade zu meinem Java-Aufruf 1> "Pfad zu einer Logdatei" hinzugefügt und habe das zum Laufen gebracht. – user242591

Antwort

22

zwei Optionen:

Führen Sie Ihre Java-Anwendung mit stdout umgeleitet

java com.example.MyApp > out.txt 

Verwenden jstack statt.

Das jstack Dienstprogramm ermöglicht es Ihnen, ein Thread-Dump zu erhalten und die Ausgabe in der aktuellen Konsole anstelle der Standardausgabe der Java-Anwendung zu senden, so dass Sie sie umleiten.

Zum Beispiel, wenn die PID Ihrer Java-Anwendung 12345 ist (verwenden Sie das Dienstprogramm jps es schnell zu finden):

jstack 12345 > threads.txt 
2

Wenn Sie Details aller Threads und andere JVM Details, versuchen jconsole.

0

Bitte fügen Sie Ihrer Anwendung folgende JVM-Argumente bei. Thread-Dump sollte in dump.log erfasst werden.

-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=dump.log 

Bitte beachten Sie, dass es nicht umleitet, sondern die JVM-Diagnoseprotokollierung aktiviert. Also, es könnte auch möglich sein, über Kopf.

Wenn Sie jedoch JDK in der Umgebung verwenden können, indem Sie jstack oder jcmd (jcmd is preferred with JDK 1.8) verwenden, können Sie Thread-Dumps erfassen und in eine Datei umleiten.

Verwandte Themen