CPU 打满故障
在生产环境中,CPU 突然被打满会直接影响服务可用性与用户体验。

要在两分钟内完成定位,需要有条理的思路、预先准备的工具与清晰的优先级判断。
如何 2 分钟定位?

第 1 步:定位耗 CPU 的进程 (30秒)
直接使用 top 命令查看系统资源,找出 CPU 占用率最高的进程。
命令:top
关键看点:输入 top 后,按大写 P 让进程按 CPU 使用率排序。记录下该进程的 PID。
第 2 步:定位耗 CPU 的线程 (30秒)
我们需要进入进程内部,看看到底是哪个线程在“作妖”。
命令:top -Hp <PID>
解释:-H 表示显示线程,-p 指定进程号。
关键看点:你会看到一堆线程。记录下排在最前面的线程 TID(它是十进制的)。
第 3 步:转换线程 ID 为十六进制 (10秒)
因为 Java 堆栈信息(jstack)中的线程 ID 是用十六进制(nid)表示的,所以需要转换。
命令:printf “%x\n” <TID>
示例:如果 TID 是 1024,输出就是 400。
第 4 步:在堆栈信息中锁定代码 (50秒)
使用 jstack 打印出线程快照,通过刚才的十六进制 ID 搜索。
命令:jstack <PID> | grep <十六进制TID> -A 30
关键看点:
业务线程状态为 RUNNABLE:grep 出来的代码行即为正在疯狂执行的逻辑(如死循环、复杂计算)。
线程名为 VM Thread 或 GC task thread:说明是频繁 Full GC 导致的 CPU 飙高。