首页/系统/Linux 内核与性能调优速查/perf record 与 report 采样工作流

perf record 与 report 采样工作流

采样记录后用 report 聚合热点: 这是 perf 的核心工作流, 频率与调用栈是质量关键。

采样与聚合流程

记录加报告是性能分析的核心工作流:记录阶段按固定频率打断程序运行并记下当时的调用栈,报告阶段把成千上万个样本按符号聚合,得到各函数的开销占比。采样频率决定了能否抓到短时热点,调用栈采集方式决定了归因能下钻到多深,二者共同决定报告质量。

基本信息

适用平台Linux(内核自带性能工具)
关键参数采样频率、调用栈开关、输出文件、观测目标
报告形式文本输出便于脚本处理,交互界面便于下钻
前提条件目标与内核有符号信息,否则热点显示为地址
权限要求采样通常需要较高权限

典型使用场景

  • 定位服务 CPU 消耗集中的函数,作为优化的起点。
  • 优化前后对比热点是否发生漂移,验证改动方向。
  • 判断内核态占比是否异常升高,区分业务问题与系统问题。
  • 为火焰图准备原始采样数据。
  • 排查偶发卡顿:把采样窗口对准现象发生的时段。

记录与查看

记录与查看
perf record -F 99 -a -g -- sleep 30            # 整机 30 秒,带调用栈
perf record -F 499 -p 12345 -g -- sleep 10     # 对单进程提高频率,抓短时热点
perf record -o /tmp/app.data -g -p 12345 -- sleep 20   # 指定输出文件便于对比
perf report --stdio | head -40                 # 文本方式查看热点
perf report --stdio --sort symbol --percent-limit 1 | head -30   # 过滤长尾,聚焦主要热点
perf report -i /tmp/app.data --stdio | head -20   # 查看历史采集文件

报告读法

字段含义判读要点
开销占比该符号样本占全部样本的比例排序后定优先级
样本数命中的样本个数样本太少时结论不稳
符号函数或方法与内核例程显示为地址说明缺符号
来源模块符号所属的可执行文件或库区分业务代码与依赖库
采样频率不是越高越好:先低后高确认结果稳定,再按需要提高;高频率在短窗口上才有意义,长时间高频率会明显扰动目标。
报告里出现大量未知符号时不要急着下结论,先补上符号与调试信息;基于地址占比做出的优化判断往往是错的。

易错点

  • 采样频率过高扰动目标,被观测程序的行为已经不是原来的样子,先低后高验证稳定性。
  • 缺少符号信息导致热点显示为地址,据此判断优化方向等于盲猜。
  • 采样窗口与现象时段错位,采到的是平稳期的数据,看不到问题。
  • 只看占比不看样本数:样本很少的条目占比波动大,不足以支撑结论。
  • 长时间高频采集产生的大文件挤占磁盘,影响服务本身。

数据来源与参考

  • man perf-record
  • man perf-report
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌