如何在 Linux 性能分析中使用 perf 工具?
2026/5/12 23:02:32 网站建设 项目流程

perf 是 Linux 内核自带的性能分析工具,适合在需要定位 CPU 消耗、函数调用热点或硬件事件异常时进行底层采样分析。

先说结论:perf 适合生产环境低风险采样,但需要 root 权限且要注意对业务的微小干扰。

  • 先定位:用 perf top 确认 CPU 热点函数
  • 先做:用 perf record 抓取调用栈数据(配合 timeout 控制时长)
  • 再验证:对比优化前后的 cycles 和指令数

环境准备与安装

大多数发行版需要安装 linux-tools 包,且版本需与内核匹配。Ubuntu 下运行:

sudo apt install linux-tools-common linux-tools-generic linux-tools-$(uname -r)

若需要解析动态库符号,建议安装调试符号包,例如libc6-dbg。perf 通常需要 root 权限或 CAP_SYS_ADMIN 能力,普通用户运行可能会报错权限不足。

核心命令速用

以下是几个最高频的命令,直接复制即可使用:

实时查看热点函数:perf top

录制数据并生成报告:perf record -g -p <pid>然后perf report

查看性能计数器统计:perf stat -p <pid>

生产环境低开销采样(限制频率 99Hz):perf record -F 99 -p <pid>

分步处理流程

1.定位热点:运行perf top观察实时占用最高的函数。

2.采集数据:使用timeout 10 perf record -g -p <进程 ID>采集 10 秒数据,-g 表示记录调用图。避免使用不存在的 `--sleep-time` 参数。

3.分析报告:运行perf report查看交互式界面,或使用perf script导出文本。

perf report 输出解读

运行perf report `--stdio`可查看文本格式,典型输出如下:

# Samples: 10K of event 'cpu_core' # Event count (samples): 10000 # # Overhead Command Shared Object Symbol # ........ ....... ................. ...................... # 45.23% myapp myapp [.] process_request 12.05% myapp [kernel.kallsyms] [k] __mutex_lock 5.10% myapp libc.so.6 [.] malloc

关键指标:

  • Overhead:该函数占用的 CPU 时间百分比,越高越需要优化。
  • Command:产生性能的进程名。
  • Symbol:具体函数名,若显示十六进制地址则说明缺失调试符号。

怎么验证是否生效

优化代码或配置后,再次运行perf stat -p <pid>,观察 task-clock、cycles 和 instructions 数值是否下降。如果热点函数在 perf report 中的占比降低,说明优化有效。性能提升幅度取决于瓶颈类型,通常热点函数占比下降即代表优化有效。

常见坑与排查

1.权限问题:容器内运行 perf 可能受限于 capabilities,需要宿主机的支持,或调整/proc/sys/kernel/perf_event_paranoid配置。

2.开销控制:高频采样会增加 CPU 负载,生产环境建议控制采样频率,使用-F 99限制为 99Hz 以降低干扰。

3.符号表缺失:如果看到十六进制地址而不是函数名,需要确保调试符号已安装。例如 Ubuntu 下安装libc6-dbg或对应包的 debuginfo 版本。

来源 https://www.zjcp.cc/ask/10911.html

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询