使用jstack
我们可以采用正在运行的java进程的线程转储。通过top
和ps -aef | grep java
命令,我们可以使用大多数系统资源来识别流氓进程。Shell脚本采取java进程的线程转储
所以,如果我们使用jstack <rogue pid> >> threaddump.log
我们可以采取指定的java进程的线程转储。
现在我的问题,是否有任何shell脚本,可以识别顶级java进程,采取进程id(pid),输入到jstack
实用程序并采取线程转储?
我在网上搜索和大多数的链接需要手动输入进程ID的努力。所以,我只是想知道是否有任何现有的shell脚本可以避免手动输入。
在此先感谢。
===========解决方案如下:
对于我这个管的工作原理:
ps -eo pid,%cpu,comm | grep java |sort -nr -k2 | head -n1 | awk '{print $1}' | xargs jstack
说明:
PS -eo PID,%的CPU,通信:将打印PID CPU占用率和命令名称
的grep java的所有进程: greps all java进程
sort -nr -k2:将结果数值反向排序第二列
头-n1:打印的第一行
AWK ‘{打印$ 1}’:打印第一列
xargs的jstack:取得输入,并使用它作为参数用于jstack命令