背景:近期一个模块(暂且称为A)新上了一个需求,改动了些代码,在测试环境部署之后,该模块系统CPU使用率动不动就飙升到90%,甚至200%,严重影像其他业务执行。
排查过程
1.使用top查看当前CPU使用情况,找到CPU使用率高的Java进程PID 104234
2.根据进程PID,找到对应的服务
ps -ef | grep 104234
确认为之前修改过的模块A
3.查看当前进程PID下所有的线程占用CPU情况,得到占用率最高线程PID 16466
top -H -p 104234
将这个线程PID转换成16进制,转换后为4052
地址: 十进制转换 - 在线进制转换器
4.使用jstack命令将进程PID 104234信息导出到文件104234.log
jstack 104234 > 104234.log
在104234.log中查找4052
可以找到项目中具体的执行线程,接下来就是看该线程的执行逻辑是怎样的了,在idea中全局搜索该线程名,找到该线程的具体使用场景,进一步排查代码中可能导致CPU占用率过高的原因。