当我向我的Java程序发出kill -3 <pid>
命令时,它会在控制台上生成线程转储。如何将其重定向到文件?
答案 0 :(得分:23)
两个选项:
使用stdout重定向
运行Java应用程序java com.example.MyApp > out.txt
改为使用jstack
。
jstack实用程序允许您获取线程转储并将输出发送到当前控制台而不是Java应用程序的stdout,允许您重定向它。
例如,如果Java应用程序的PID是12345(使用jps实用程序快速找到它):
jstack 12345 > threads.txt
答案 1 :(得分:3)
答案 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),则可以捕获线程转储并重定向到文件。