1. 先准备一段java程序,后台运行
2. 使用 top
命令查看cpu的进程使用情况
在这里看到了一个进程占据了99.3%的cpu利用率,这显然是出现了cpu飙升的情况,这会到期系统其他进程得不到cpu的使用权,从而出现卡顿,因此需要进行排查导致cpu飙升的进程哪里出现了问题
3.使用 命令查看进程和进程下线程的cpu使用率
ps H -eo pid,tid,%cpu grep 32655
-ps 查看进程对cpu的占用情况
- H 显示这台机器的所有进程
- eo 输出感兴趣的内容
- pid 进程id
- tid 线程id
- %cpu cpu的百分占用率
- grep 过滤出自己感兴趣的进程号
- 32655 进程号
此时看到了进程和其对应下的线程的cpu使用百分比
可以看到,进程号为32655,该进程下对应的线程号为32665的线程出现了cpu占用率飙高的情况
4.使用jstack 进程id 查看该进程下所有运行的线程运行形况
将上一步查出来的线程id转换成十六进制的数,然后与jstack命令输出的线程信息做对比,找到对应的进程
32665 转换为十六进制是:7f99,根据这个数找到对应线程
通过线程输出的日志信息找到对应占据cpu飙升的部分代码,进行优化