linux perf工具常用方法
目录
perf 是 Linux 系统性能分析的强大工具,基于内核的 perf_events 子系统,可用于监控 CPU 性能、硬件/软件事件、函数调用等。以下是 perf 的常用方法和示例:
1. 基本命令格式
perf [options] <command> # 对某个命令进行性能分析
perf [options] -- <command> [args] # 分析带参数的命令
perf [options] stat/record/report/top... # 直接使用子命令
2. 常用子命令及示例
(1) perf stat:统计事件
统计程序运行期间的硬件/软件事件(如 CPU 周期、缓存命中率等)。
# 统计命令执行的通用事件(CPU 周期、指令数等)
perf stat ls
# 统计特定事件(如缓存命中率)
perf stat -e cache-misses,cache-references ls
# 持续监控系统全局事件(按 Ctrl+C 停止)
perf stat -a sleep 5
(2) perf record + perf report:采样分析
record:记录采样数据到文件(默认perf.data)。report:分析采样结果。
# 记录某个命令的性能数据(-g 记录调用栈)
perf record -g ./my_program
# 记录整个系统的 CPU 使用(采样 10 秒)
perf record -a -g sleep 10
# 生成报告(交互式界面)
perf report
perf report --stdio # 文本格式输出
(3) perf top:实时监控
类似 top,实时显示系统或进程的热点函数。
perf top # 监控所有 CPU
perf top -p <PID> # 监控特定进程
perf top -e cache-misses # 监控特定事件
(4) perf list:查看支持的事件
列出所有可监控的硬件/软件事件。
perf list # 列出所有事件
perf list | grep cache # 过滤缓存相关事件
(5) perf trace:系统调用追踪
类似 strace,追踪系统调用和信号。
perf trace ls # 追踪命令的系统调用
perf trace -p <PID> # 追踪正在运行的进程
(6) perf annotate:代码级分析
反汇编并注释热点代码(需调试符号)。
perf annotate -s <function_name>
(7) perf script:导出原始数据
将 perf record 的数据转换为可读文本或脚本格式。
perf script # 输出原始事件流
perf script -F time,event,trace # 自定义字段
3. 常用选项
| 选项 | 说明 |
|---|---|
-a |
监控所有 CPU(系统级) |
-p <PID> |
监控特定进程 |
-e <event> |
指定监控的事件(如 cycles, instructions) |
-g |
记录调用栈(用于生成火焰图) |
-o <file> |
输出到文件(如 perf record -o data.file) |
--call-graph dwarf |
更准确的调用栈记录(需调试信息) |
4. 高级用法
(1) 生成火焰图
- 采样数据:
perf record -a -g sleep 10 - 生成折叠堆栈:
perf script | stackcollapse-perf.pl > out.folded - 生成 SVG 火焰图:
flamegraph.pl out.folded > flamegraph.svg需安装 FlameGraph 工具。
(2) 监控内核事件
# 监控缺页异常
perf stat -e page-faults ls
(3) 多事件统计
perf stat -e cycles,instructions,cache-misses ./my_program
5. 常见问题
- 权限问题:部分事件需要
sudo或调整/proc/sys/kernel/perf_event_paranoid。 - 调试符号:若函数名显示为十六进制地址,需安装调试符号包(如
linux-image-$(uname -r)-dbgsym)。 - CPU 频率影响:使用
perf stat --no-scale避免频率缩放干扰。
通过组合这些命令,可以快速定位 CPU 瓶颈、内存问题或系统调用延迟等性能问题。
Do not communicate by sharing memory; instead, share memory by communicating.

浙公网安备 33010602011771号