没有jstack的Java线程转储

时间:2018-12-08 06:48:06

标签: java linux multithreading shell monitoring

我需要从命令行(ubuntu服务器)监视Java线程状态以与Icinga监视器一起使用。但是我不能使用jps,jstack和jcmd命令,因为不允许在生产服务器中安装JDK。

使用ps命令的process_id

# ps -ef| grep [s]tart.jar | cut -d' ' -f6
1201

但是我正在努力收集Java线程转储。我尝试使用kill -3,但无法获得任何输出。

还有其他从命令行收集Java线程状态的方法吗?

1 个答案:

答案 0 :(得分:1)

我找到了执行kill -3 <pid>时捕获线程转储的方法。 我在码头服务器的JAVA_OPTIONS中添加了以下选项,可帮助在指定位置记录线程转储。

-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=/var/log/jetty9/threaddump.log

现在执行kill -3 <pid>命令会在threaddump.log中记录线程转储,该线程转储用于了解线程状态。