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

时间:2016-11-21 20:50:32

标签: java linux shell java-threads

使用jstack,我们可以对正在运行的java进程进行线程转储。使用topps -aef | grep java命令,我们可以使用大多数系统资源来识别恶意流程。

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

对我来说,这个管道工作:

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

说明:

ps -eo pid,%cpu,comm:打印具有PID CPU使用率和命令名称的所有进程

grep java:greps所有java进程

sort -nr -k2:将结果数字反向排序为第二列

head -n1:打印第一行

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

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