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频繁
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?