生产环境出现 CPU 占用过高,不用看日志也能定位
先用top命令找出CPU占比最高的进程
进一步定位
jps -l
或者ps -ef|grep java|grep -v grep
定位到具体的线程或者代码
ps -mp 进程id -o THREAD,tid,time
如:ps -mp 25754 -o THREAD,tid,time
- -m 显示所有的线程
- -p pid进程使用 CPU 的时间
- -o 该参数后是用户自定义格式
将线程ID转换为16进制格式
英文小写格式
上图有问题的线程Id转成16进制:
十进制 | 十六进制 |
---|---|
25755 | 649b |
jstack 进程ID | grep 16进制的线程ID -A60
-A60 表示前60行
jstack 25754 | grep 649b -A60
成功找到问题所在了,该类第14行附近