
perf 是 Linux 系统性能分析工具集,全称是 Performance Event Counters。它基于 Linux 内核的 perf_events 子系统,能够提供硬件和软件层面的性能分析能力。
perf 的主要功能包括:
perf 命令的基本语法格式为:
perf [--version] [--help] COMMAND [ARGS]
常用子命令包括:
stat:性能计数器统计record:记录性能数据report:分析记录的数据top:实时性能监控list:列出可用事件annotate:源代码级分析统计命令执行过程中的各种硬件和软件事件。
perf stat [options] command [command-options]
常用选项:
-e:指定要监控的事件-p:监控指定进程ID-a:监控所有CPU-r:重复运行并显示平均值-d:显示更多详细事件示例:
记录性能数据到文件(默认 perf.data)。
perf record [options] command [command-options]
常用选项:
-g:记录调用图(call graph)-F:采样频率(Hz)-p:记录指定进程-o:指定输出文件-e:指定要记录的事件示例:
分析 perf record 记录的数据。
perf report [options]
常用选项:
-i:指定输入文件-n:显示样本数量--stdio:文本模式输出-g:显示调用图-s:按指定字段排序示例:
实时显示系统中最消耗资源的函数。
perf top [options]
常用选项:
-e:指定监控事件-p:监控指定进程-K:隐藏内核符号-U:隐藏用户空间符号-g:显示调用图示例:
列出所有可监控的事件。
perf list [hw|sw|cache|tracepoint|pmu|event_glob]
示例:
perf 可以监控多种类型的事件:
| 事件类型 | 描述 | 示例 |
|---|---|---|
| Hardware | CPU硬件事件 | cycles, instructions |
| Software | 内核软件事件 | context-switches, page-faults |
| Cache | 缓存相关事件 | cache-references, cache-misses |
| Tracepoints | 内核静态跟踪点 | syscalls, block, sched |
| PMU | 处理器特定事件 | (vendor specific) |
| Breakpoints | 断点事件 | mem:[:access] |
perf top -p $(pidof my_program)
减少开销:对于长时间运行的性能分析,适当降低采样频率(如 -F 99)
符号解析:确保调试符号可用,可以通过安装调试包或使用-g编译程序
火焰图生成:结合FlameGraph工具生成直观的性能分析图
多核分析:使用 -a 选项监控所有CPU,或使用 -C 指定特定CPU
用户/内核空间分离:使用 -k 和 -u 选项分别分析内核和用户空间
权限问题:
echo -1 > /proc/sys/kernel/perf_event_paranoid
或使用sudo运行perf
缺少符号信息:
采样数据过大:
无法解析Java/Python等高级语言:
官方文档:Linux内核源码中的tools/perf/Documentation目录
书籍推荐:
在线资源:
相关工具:
通过掌握perf命令,你可以深入分析Linux系统的性能特征,快速定位性能瓶颈,优化应用程序和系统配置。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号