JVM线程转储位置

时间:2010-01-14 06:10:52

标签: java jvm

当我向我的Java程序发出kill -3 <pid>命令时,它会在控制台上生成线程转储。如何将其重定向到文件?

4 个答案:

答案 0 :(得分:23)

两个选项:

使用stdout重定向

运行Java应用程序
java com.example.MyApp > out.txt

改为使用jstack

jstack实用程序允许您获取线程转储并将输出发送到当前控制台而不是Java应用程序的stdout,允许您重定向它。

例如,如果Java应用程序的PID是12345(使用jps实用程序快速找到它):

jstack 12345 > threads.txt

答案 1 :(得分:3)

我通常使用NetBeans探查器,但命令行中可以使用jvisualvm

答案 2 :(得分:2)

如果您需要所有线程和其他JVM详细信息的详细信息,请尝试使用jconsole。

答案 3 :(得分:0)

请将以下JVM参数附加到您的应用程序。应该在dump.log中捕获线程转储。

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

请注意,它不会重定向,但会启用JVM诊断日志记录。所以,也可能有头脑。

但是,如果您可以在环境中使用jkack或jcmd(jcmd is preferred with JDK 1.8),则可以捕获线程转储并重定向到文件。