1. 线上 CPU 100% 的排查路径,从 top 到火焰图的完整工具链如何使用?
线上服务器 CPU 使用率达到 100% 时,如何从 top 开始逐层定位到具体线程和代码路径,并利用火焰图等工具完成完整的排查?
- 熟悉 top、pidstat、perf、jstack 等工具的使用与定位思路
- 能够区分用户态 CPU、内核态 CPU、上下文切换与 IO 等待
- 掌握火焰图(Flame Graph)的生成与解读方法
排查路径通常分四步:第一步用 top 确认总 CPU 占用高的进程,记录 PID 并观察 %us、%sy、%wa 等指标,判断是用户态计算密集还是内核态/IO 等待。第二步用 top -Hp 或 pidstat -t 定位到具体线程。第三步用 jstack 抓取 Java 线程栈,或用 perf record -p -g 采样生成调用栈,再用 perf script 配合 FlameGraph 工具(stackcollapse-perf.pl + flamegraph.pl)生成火焰图,直观看到哪个函数占用的 CPU 栈面积最大。第四步结合业务代码定位热点,如循环、正则、序列化、锁竞争或 GC 频繁。
火焰图的宽度代表函数累计 CPU 时间占比,最宽的平台即为热点,能快速从"现象"收敛到"代码行"。关键是先分层(进程→线程→代码),避免盲目优化。若 %sy 高则关注系统调用与锁,若 %wa 高则转向 IO 而非 CPU。