2010-01-14 71 views
14

當我向我的Java程序發出kill -3 <pid>命令時,它會在控制檯上生成線程轉儲。我如何將它重定向到一個文件?JVM線程轉儲位置

+0

好的,謝謝你。我想到了。 kill -3命令導致我的jvm寫入STDOUT。我只是把它添加到我的Java調用1>「日誌文件的路徑」,並得到這個工作。 – user242591 2010-01-14 09:53:34

回答

22

兩個選項:

與標準輸出運行Java應用程序重定向

java com.example.MyApp > out.txt 

使用jstack代替。

jstack實用程序允許您獲取線程轉儲並將輸出發送到當前控制檯而不是Java應用程序的stdout,從而允許您重定向它。

例如,如果你的Java應用程序的PID爲12345(使用jps工具來快速找到它):

jstack 12345 > threads.txt 
2

如果你希望所有線程和其他JVM細節的詳細信息,請JConsole的。

0

請將以下JVM參數附加到您的應用程序中。應該在dump.log中捕獲線程轉儲。

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

請注意,它不會重定向,但會啓用JVM診斷日誌記錄。所以,也有可能在頭頂上。

但是,如果您可以在環境中使用JDK,使用jstack或jcmd(jcmd is preferred with JDK 1.8),則可以捕獲線程轉儲並重定向到文件。