Shell 脚本获取 java 进程的线程转储

Shell script to take thread dump of a java process

使用 jstack 我们可以获取 运行 java 进程的线程转储。使用 topps -aef | grep java 命令,我们可以识别使用大部分系统资源的流氓进程。

因此,如果我们使用 jstack <rogue pid> >> threaddump.log,我们可以获取指定 java 进程的线程转储。

现在我的问题是,是否有任何 shell 脚本可以识别顶级 java 进程、获取进程 ID(pid)、输入到 jstack 实用程序并获取线程转储?

我在网上搜索过,大部分链接都需要手动输入进程号。所以,我只是想知道是否有任何现有的 shell 脚本可以避免手动输入。

提前致谢。

对我来说,这条管道有效:

ps -eo pid,%cpu,comm | grep java |sort -nr -k2 | head -n1 | awk '{print }' | xargs jstack

说明:

ps -eo pid,%cpu,comm : 打印所有 PID CPU 用法和命令名称

的进程

grep java : greps 所有 java 进程

sort -nr -k2 : 按第二列倒序排列结果数值

head -n1 : 打印第一行

awk '{print $1}' : 打印第一列

xargs jstack : 获取输入并将其用作 jstack 命令的参数