1.找到CPU占用高的程序
使用top命令
发现占用 CPU 最高的线程是 Java 进程,进程 PID 为1867。
2.用 top -Hp 命令查看该进程中占用 CPU 最高的线程
top -Hp 1867
发现该进程中CPU占用最高的线程为1867(可能不止一个)。转换为16进制74b
3.保存该进程的线程栈信息
当前 Java 程序的所有线程信息都可以通过 jstack命令查看,用jstack命令将该进程的线程栈保存下来。
jstack 1867 > thread_stack.log
4.从线程栈记录里找到对应线程的信息
grep thread_stack.log | 74b -A 100
grep -A k 可以显示匹配内容以及后面的k行内容
grep -B k 可以显示匹配内容以及前面的k行内容
grep -C k 可以显示匹配内容以及前后面的k行内容
可以看到占用CPU最高的线程可能出问题的代码在哪个文件哪一行。
3.4.两步也可以一起执行
jstack 1867 | grep 74b -A 100