JVM线程转储位置

8nuwlpux  于 2022-11-07  发布在  其他
关注(0)|答案(5)|浏览(158)

当我向我的Java程序发出kill -3 <pid>命令时,它会在控制台上生成线程转储。

brccelvz

brccelvz1#

两个选项:

使用重定向的标准输出运行Java应用程序

java com.example.MyApp > out.txt

请改用jstack

jstack实用程序允许您获取线程转储,并将输出发送到当前控制台,而不是Java应用程序的stdout,从而允许您对其进行重定向。
例如,如果Java应用程序的PID是12345(使用jps实用程序可快速找到它):

jstack 12345 > threads.txt
goqiplq2

goqiplq22#

我通常使用NetBeans分析器,但是jvisualvm可以从命令行获得。

sxpgvts3

sxpgvts33#

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

xxe27gdn

xxe27gdn4#

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

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

请注意,它不重定向,但启用JVM诊断日志记录。因此,也可能存在开销。
但是,如果环境中可以有JDK,则可以使用jstack或jcmd(jcmd is preferred with JDK 1.8)捕获线程转储并重定向到文件。

rsl1atfo

rsl1atfo5#

您可以使用除kill -QUIT方式之外的4种方式生成java thread dumps

相关问题