## 概念是什么
CPU 去哪了,这是性能排查的第一个问题。perf top 实时采样 CPU 上的执行热点,像进程版 top 一样滚动刷新,但它下钻到函数级别,直接告诉你哪一个函数烧掉了多少比例的 CPU。它是 perf 工具族的入口,多数发行版随内核工具包提供。
## 背后原理
perf 基于硬件性能计数器与内核采样机制,按设定频率周期性地抓取 CPU 上正在执行的指令地址,把落在哪个函数记一票,票数占比近似等于该函数消耗的 CPU 占比。采样的好处是开销低、不需修改程序,坏处是存在统计噪声,占比小的条目参考价值有限。
perf top perf top -p 24680 perf record -F 99 -a -g -- sleep 30
## 最小实操
直接运行 perf top 看全局,按进程把范围缩小用 p 参数。权限不足时会提示受限,需要调低内核的采样限制参数或用 root 执行。界面上第一列就是占比,关注头部几名:内核函数占大头常见于系统调用或网络软中断密集,C 库函数靠前多半是内存操作热点,具体业务函数靠前则直接指向代码。
按 q 退出,方向键翻页。top 视角不够时,换 record 采样三十秒生成数据文件,再用报告模式离线分析,还能进一步注释到指令级。
## 常见错误
没有符号信息时热点全显示为地址,解决方法是安装对应包的调试符号。采样频率设得过高会干扰业务,九十九赫兹是平衡值。顺云云服务器上容器化业务要记得热点归属共享内核,perf 看到的是宿主视角,容器内函数名需要符号与命名空间对上才有意义。
采样视角的适用边界也交代一下:perf top 展示的是 CPU 时间去向,IO 等待与睡眠不占 CPU 的环节它看不见,这类问题换 off-CPU 分析或 IO 工具。虚拟化环境里性能计数器的可用性取决于平台呈现,遇到采集受限时先退回采样频率更低的 record 模式,数据少一点也够定位大头。长期习惯上,热点采样的输出按次存档,版本迭代后做同样采样的对比,性能回退最早在这里暴露。