Java 服务 CPU 占用过高排查
-
先需要找出那个进程占用 CPU 高。
top 列出系统各个进程的资源占用情况。 -
然后根据找到对应进行里哪个线程占用 CPU 高。
top -Hp 进程 ID 列出对应进程里面的线程占用资源情况 -
找到对应线程 ID 后,再打印出对应线程的堆栈信息
printf "%x\n" PID 把线程 ID 转换为 16 进制。
jstack PID 打印出进程的所有线程信息,从打印出来的线程信息中找到上一步转换为 16 进制的线程 ID 对应的线程信息。 -
最后根据线程的堆栈信息定位到具体业务方法,从代码逻辑中找到问题所在。
查看是否有线程长时间的 watting 或 blocked,如果线程长期处于 watting 状态下, 关注 watting on xxxxxx,说明线程在等待这把锁,然后根据锁的地址找到持有锁的线程
本文来自博客园,作者:小朋友有很多问号,转载请注明原文链接:https://www.cnblogs.com/xuhu/p/17390760.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步