JVM--定位栈信息

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 " <tid> 命令将线程的tid转成十六进制的值,

然后执行 jstack -l <pid> | grep <thread-hex-id> -A 10 命令显示出错的堆栈信息,

pid是进程的pid,thread-hex-id是线程的16进制id,即 printf "%x " <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