记一次线上服务器CPU占用率极高的排查过程

背景

今天被运维告知线上payment项目CPU占用率极高的警告通知,让我们开发自己排查问题,然后开始了排查问题之旅…

解决步骤

进程和线程追踪

  • 执行top命令按CPU占用率排序,得到进程PID,如下图,PS:此图为下来的模拟场景所以CPU占用率并不高,实际线上查出来的进程PID为16485
    img
  • 根据进程PID查找最消耗CPU的线程PID为1594

    1
    top -Hp pid

    img

    分析dump文件

  • 执行以下命令获取thread dump文件

    1
    ./jstack 1594 -> 1594-dump.log
  • 将线程追踪步骤查出的PID十进制1594转为十六进制的线程PID 63a,查找1594-dump.log线程堆栈信息,最终追踪到具体的业务位置
    img

    代码定位和问题解决

    img
    最终安排人员修复问题..