与 jstack
我们可以获取正在运行的 Java 进程的线程转储。与 top
和 ps -aef | grep java
命令,我们可以识别使用大部分系统资源的流氓进程。
所以,如果我们使用 jstack <rogue pid> >> threaddump.log
我们可以获取指定java进程的thread dump。
现在我的问题是,是否有任何 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,comm : 打印所有进程的 PID CPU 使用率和命令名称
grep java : grep 所有 java 进程
sort -nr -k2 : 按第二列倒序排列结果数值
head -n1 : 打印第一行
awk '{print $1}' : 打印第一列
xargs jstack :获取输入并将其用作 jstack 命令的参数
我是一名优秀的程序员,十分优秀!