服务器 CPU 100% 的十分钟排查法
半夜被告警叫醒,CPU 100%。这种时候最怕两件事:乱猜,和乱重启。我的习惯是按固定顺序走三步,多数情况十分钟内能定位。
第一步,找进程。top 按 Shift+P 按 CPU 排序,记住那个吃满的 PID。如果 top 里看不到明显大户,pidstat 1 再确认一遍——有些短暂尖峰 top 截不到。
第二步,找线程。top -H -p <pid> 看进程里哪个线程在烧。记下线程号,转十六进制——这一步在多语言环境里是分水岭:Java 用 jstack 按 nid 对着找;.NET 用 dotnet-trace 或 /proc/<pid>/task 配合 dump。

第三步,定位代码。拿到线程栈之后看两类东西:死循环(栈顶永远是同一个方法)和锁竞争(一堆线程等同一把锁)。如果是 GC 线程在烧,问题不在代码在内存——回到分配端找大对象。
两个附加习惯:一是留现场,perf top -p <pid> 或者 dump 一份再动任何配置;二是记录时间线,什么时候开始涨、之前发过什么版——十次里有七次,答案在变更记录里。
重启能止血,但把问题也重启掉了。十分钟流程走完再决定,大多数时候根本不用重启。