Java 服务 CPU 占用过高排查

  1. 先需要找出那个进程占用 CPU 高。
    top 列出系统各个进程的资源占用情况。

  2. 然后根据找到对应进行里哪个线程占用 CPU 高。
    top -Hp 进程 ID 列出对应进程里面的线程占用资源情况

  3. 找到对应线程 ID 后,再打印出对应线程的堆栈信息
    printf "%x\n" PID 把线程 ID 转换为 16 进制。
    jstack PID 打印出进程的所有线程信息,从打印出来的线程信息中找到上一步转换为 16 进制的线程 ID 对应的线程信息。

  4. 最后根据线程的堆栈信息定位到具体业务方法,从代码逻辑中找到问题所在。

    查看是否有线程长时间的 watting 或 blocked,如果线程长期处于 watting 状态下, 关注 watting on xxxxxx,说明线程在等待这把锁,然后根据锁的地址找到持有锁的线程

posted @ 2023-05-11 13:08  小朋友有很多问号  阅读(21)  评论(0编辑  收藏  举报