首页/系统/Linux 运维命令速查/perf record/report 采样分析
性能与监控48 条

perf record/report 采样分析

Linux 自带性能剖析:perf record 采样调用栈、perf report 看热点函数;比 top 更进一步回答「CPU 花在哪个函数」。

Linux 运维命令速查系统更新于 2026-10-13

perf 采样在做什么

perf 是内核自带的性能剖析工具(发行版通过 perf 或 linux-tools 包提供):perf record 以指定频率采样,把样本连同调用栈写进 perf.data;perf report 打开它按符号聚合成热点视图;perf top 实时观察;perf stat 给的是计数视角(IPC、cache miss、上下文切换次数)。它回答的是“CPU 时间花在哪个函数”,比 top 的进程级视图深一层;符号缺失时只能看到地址,需要安装对应的 debuginfo 或 -dbg 包。

基本信息

适用平台Linux(RHEL 系 perf 包;Debian 系 linux-tools-<内核版本>)
权限要求采样需 root,或放宽 /proc/sys/kernel/perf_event_paranoid
采样频率-F 99 表示每秒约 99 次,是常用折中值
常用子命令record、report、top、stat、script
符号来源debuginfo(RPM)/ -dbg(deb)包
容器限制perf_event_paranoid 与 seccomp 常导致采样失败

典型使用场景

  • 接口变慢但看不出哪个函数吃 CPU,需要函数级热点
  • 优化前后对比 IPC、缓存命中与上下文切换(perf stat)
  • 生成火焰图定位长调用链(perf script 配合 FlameGraph 脚本)
  • 排查是否因锁竞争或调度造成抖动(配合调度类事件)
  • 第三方服务无埋点时,用采样做黑盒性能画像

采样与查看

采样与查看
perf --version                       # 先确认工具存在(Debian 系要装对应内核的 linux-tools)
pgrep -f 'app.jar' | head -1         # 先拿到目标进程 PID
sudo perf record -F 99 -g -p <PID> -- sleep 30   # 采样 30 秒,-g 记录调用栈
sudo perf report --stdio | head -n 40            # 按符号聚合,找热点函数
sudo perf top -F 99                  # 实时观察全局热点,适合快速判断
sudo perf stat -p <PID> -- sleep 5   # 计数视角:IPC、cache-miss、上下文切换
sudo perf script > /tmp/perf.script  # 导出样本,喂给火焰图脚本
cat /proc/sys/kernel/perf_event_paranoid         # 权限门槛,非 root 采样失败先看它

子命令对照

子命令输出什么怎么用
perf record采样结果写入 perf.data必须加 -g 才有调用栈,否则报告价值有限
perf report符号聚合的调用链与占比定位热点函数的第一入口
perf top实时刷新的热点列表短时观察、快速判断
perf stat硬件与内核事件计数算 IPC,判断是否受内存带宽或切换拖累
perf script原始样本导出生成火焰图或自定义分析
采样频率越高开销越大:-F 99 是常见折中;线上排障用几十秒到几分钟的短窗口,不要长期挂着,避免让被测服务雪上加霜。
容器内采样常被 perf_event_paranoid 与 seccomp 拦住,部分发行版为缓解内核漏洞还会把该值调得更高;容器里失败时改到宿主上采样,不要反复重试消耗业务资源。

易错点

  • 采样时漏掉 -g:报告里没有调用链,只能看到扁平函数列表,难以定位根因
  • 符号缺失导致报告全是地址:装对应 debuginfo/-dbg 包后重新采样,否则结论无法落地
  • 长时间高频采样:本身消耗可观 CPU 与磁盘,还可能明显拖慢被测服务
  • 在被测机器上临时搭建火焰图工具链:FlameGraph 依赖 Perl 脚本,应提前在离线环境准备好再上机

数据来源与参考

  • perf 官方文档(perf-record/perf-report)
  • Brendan Gregg:perf 使用指南

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌