使用jstack
,我们可以对正在运行的java进程进行线程转储。使用top
和ps -aef | grep java
命令,我们可以使用大多数系统资源来识别恶意流程。
因此,如果我们使用jstack <rogue pid> >> threaddump.log
,我们可以获取指定java进程的线程转储。
现在我的问题是,是否有任何shell脚本可以识别顶级java进程,获取进程ID(pid),输入到jstack
实用程序并获取线程转储?
我在网上搜索过,大多数链接都需要手动输入进程ID。所以,我只是想知道是否有任何现有的shell脚本可以避免手动输入。
提前致谢。
答案 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命令的参数