JVM线程转储位置

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

两种选择:

使用stdout重定向运行Java应用程序

 java com.example.MyApp > out.txt 

请改用jstack

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

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

 jstack 12345 > threads.txt 

我通常使用NetBeans探查器,但可以从命令行获得jvisualvm 。

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

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

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

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

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