top 或者 top -c 命令动态显示进程及占用资源的排行,区别是 -c 可以显示进程详细的信息( jps -lv 或者 ps aux | grep java 也可以查看进程)
接下来找到占用了大量的CPU资源的进程的pid, 使用top -bn1 -H -p <pid> 显示该pid下线程信息,如果去掉 -bn1 则显示实时
或者使用ps -mp <pid> -o THREAD,tid,time | sort -k2r sort参数根据线程占用的cpu比例进行排序
因为线程的 tid 在栈信息中是以十六进制的形式显示的,因此需要使用 printf "%x \n" <tid> 命令将线程的tid转成十六进制的值,
然后执行 jstack -l <pid> | grep <thread-hex-id> -A 10 命令显示出错的堆栈信息,
pid是进程的pid,thread-hex-id是线程的16进制id,即 printf "%x \n" <tid>的结果, -A 10 参数用来指定显示符合条件之后的行数
这样就可以精确到某一个线程的栈信息
若要看某个进程下的所有线程栈信息: jstack -l <pid>
详细介绍:
https://www.javatang.com/archives/2017/10/19/33151873.html
https://www.jianshu.com/p/90579ec3113f
原文:https://www.cnblogs.com/gczmn/p/12144553.html