perf top 实时热点

实时查看系统或进程内热点函数, 适合快速浏览当前 CPU 消耗分布。

实时热点视图

实时热点视图按当前采样即时展示各符号的开销占比,不需要先落盘再出报告,适合快速判断「现在谁在吃 CPU」。它本质上是边采集边聚合,所以长时间开着本身就有开销。现场排查时先用它扫一眼,再决定要不要做正式采样记录。

基本信息

适用平台Linux(内核自带性能工具)
常用选项指定进程、刷新间隔、事件、采样周期、调用链视图
显示过滤可只看用户态符号或隐藏内核符号
文本模式非交互输出适合脚本与远程终端
权限要求采样通常需要较高权限

典型使用场景

  • 上线后现场扫一眼热点分布,判断是否需要深入分析。
  • 排查是否有非业务进程在抢占算力。
  • 远程终端环境用文本模式输出前若干行,快速定位。
  • 应急时避免落盘,直接观察实时分布。
  • 确认内核态占比是否异常,决定是否转向系统层排查。

用法

用法
perf top                              # 整机实时热点
perf top -p 12345                     # 只看指定进程
perf top -d 5 -p 12345                # 每 5 秒刷新一次
perf top --stdio -K | head -30        # 文本模式并隐藏内核符号
perf top -e cycles -c 100000          # 指定事件与采样周期
perf top -g                           # 展开调用链视图
perf top -U                           # 仅显示用户态符号

界面列读法

列含义判读要点
开销占比该符号样本占总体比例排序后定优先级
符号函数名或内核例程名显示为地址说明缺符号
来源模块符号所属可执行文件或库区分业务代码与第三方库
用户态标记该符号所处特权级内核占比高需换方向排查
交互界面可切换符号与模块视图;远程或脚本环境用文本输出更省事,但只给前若干行,适合快速判断而非长期观察。
长时间挂着实时视图会持续消耗资源,在本来就紧张的生产机上可能加剧问题;排查完要及时退出,需要长时间观察时改用低频采样落盘。

易错点

  • 长时间运行实时视图本身带来采样开销,排查过程中把机器推得更紧张。
  • 把内核符号占比直接等同于业务问题,未做调用栈下钻就下结论。
  • 在缺符号的环境里解读地址占比,判断不出真正的热点函数。
  • 用整机视图给单服务定责:同机其它进程的开销被算进来,结论偏差。
  • 把实时视图的瞬时分布当成稳定画像,缺少时间窗口上的复核。

数据来源与参考

  • man perf-top
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌