CPU超高问题排查
前言:这标题和JVM调优一样,是一层窗户纸,不捅破感觉很难的样子,捅破了后,你会发出感叹:就这?
1、怎么发现CPU超高?
这还不简单,看图
当然,我们也可以登录相关服务器,使用top命令,查看该服务器CPU是否超标
top命令可以看到进程对CPU和MEM(内存)的使用占比
2、根据进程找到具体线程
top -H -p 31373
如果实在想知道-H 和-p 是啥意思,可以使用命令 man top 自行查看
3、转换线程id号为16进制
why?因为打印的日志信息就是按照16进制打的,要筛选这个线程的信息,可不就要转一下嘛
printf "%x\n" 1546
如果觉得有点麻烦,记不住命令,还可以用:当当当,当!
在线进制转换器:https://c.runoob.com/front-end/58/
反正结果都一样,获取到线程id号(例如:21756)的十六进制转换结果:54fc,这不用命令更能凸显程序员的专业嘛(装逼.jpg)
4、jstack查看具体发生问题的代码
jstack 31373 | grep 54fc -A 30
代码格式是:jstack pid | grep tid -A num
tid就是第三步转换的16进制的线程id号
-A num是为了打印关联代码行的后面30行,通常只观察一行代码,难以看出问题,所以一般多看几行
红色代码块就是我们想看到的结果,具体分析是什么原因导致的CPU超高,就需要打开IDEA去查看相关代码了。
5、通常的排查结果
-
死循环
-
OOM,GC频繁