线上CPU占用超90%排查方法

top命令查看占用CPU的进程pid

登录CPU占用高的机器,使用top命令找出占用CPU最高的Java进程
在这里插入图片描述

使用top -Hp [pid] 查看当前进程的线程CPU占用情况

找到当前占用CPU异常的Java进程后,再使用top -Hp [pid],可以显示出该进程内所有的线程,以及线程相关的一些信息
在这里插入图片描述

使用 jstack -l [pid] > jstack_log ,导出堆栈信息

发现该进程中29094线程占用CPU居高不下,使用jstack -l [pid] > jstack_log 命令,连续几次导出该进程的堆栈信息
在这里插入图片描述

定位代码行数

将第2步中找到的高CPU占用率线程PID转换成十六进制,在导出的线程堆栈信息文件中搜索,定位代码
在这里插入图片描述
最后走查该行代码上下文的异常情况,此处是模拟了三层循环,上万次执行导致的CPU占用高。
以上为我在实际工作过程中遇到的一次服务CPU占用异常的排查步骤,最终原因确实是代码中有三层循环,循环内是一个equals比较,但是循环次数太多浪费大量CPU资源,各种同学也注意实际开发中尽量避免这种多层循环嵌套的逻辑,一方面有风险另一方面可读性也很差。比如在循环查找两个List中元素对比时,可以采用先将其中一个List转换为Map处理,极大减少这种循环次数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值