第一步: 通过 top命令查找到这个消耗CPU的进程号PID 8958
top
第二步:使用 top -Hp pid(shift+p 按cpu排序,shift+m 按内存排序)
top -Hp 8958
获取到这个进程下面所有线程,通过查看%CPU找到最耗费CPU的是线程PID
第三步:使用 printf '%x\n' PID (PID为上一步中获取到的线程号)转换成对应的16进制PID 5c7e
第四步:使用jstack 获取对应的线程信息
jstack 8958 | grep 5c7e
注意:8958是一开始获取的进程号,而5c7e则是这个进程下面最最耗费CPU的线程号
第五步:jstack pid(进程pid)>stack.dump
执行上面的命令,将该消耗进程的线程相关信息导出到stack.dump文件中,打开这个文件查看每个线程的具体状态
一般来说,出现问题的代码大多数是我们自己写的业务代码导致的,所以我们可以通过查看那些我们自己创建的类的相关信息,比如根据我们自己创建的包路径去搜索,搜索结果可能不止一个地方会出现我们的包路径,这个就需要结合我们自己的代码的业务逻辑来定位到底是哪一个线程可能出现问题了。