目 录CONTENT

文章目录

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

成培培
2020-06-02 / 0 评论 / 0 点赞 / 19 阅读 / 0 字

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处理,极大减少这种循环次数。

0

评论区