• 面试官:线上一个服务突然CPU飙高,你会怎么排查
  • 我:
    1. top 命令可以查看哪个进程CPU变高
    2. top -p查看进程中哪个线程的导致CPU变高 类似这样:
      1
      2
      3
      4
      PID     USER  %CPU  COMMAND
      12345 xxx 300% java
      └── 12367 98%
      └── 12389 97%
    3. 将线程id(tid) 转成16进制 printf “%x\n” tid
    4. jstack> dump.txt 用jstack 查看进程的dump文件

      jstack 是 JDK 自带的一个命令行工具,可以把 JVM 里所有线程当前在干嘛,全部打印出来。

      dump 就是JVM中某个进程中的执行情况

    5. 在dump文件中查看 线程在干嘛 grep -A 20 “nid=0x303f” dump.txt

      cpu升高的常见原因:

      • 死循环 🔥
      • 锁竞争 🔥
      • 频繁GC 🔥
      • IO阻塞