jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。
第一步:top命令找出占用cpu最大的PID为9306

第二步:使用top -Hp 9306 输出如下:找出占用资源的线程号10294

TIME列就是各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为10294的线程,用
printf"%x\n" 10294
得到10294的十六进制值为54ee,下面会用到。
OK,下一步终于轮到jstack上场了,它用来输出进程10294的堆栈信息,然后根据线程ID的十六进制值grep,如下:
root@ubuntu:/# jstack9306 | grep -A 100 54ee //输出搜索结果的近100行,锁定耗费资源的代码位置

网友评论