补充说明
perf 是 Linux 内核源码树中 tools/perf 构建出的用户态工具,依赖内核的 perf_events 子系统。它能做硬件性能计数器统计(cycles、instructions、cache miss)、CPU 采样剖析、函数调用图、调度与锁分析、系统调用追踪等,是排查性能问题的一线工具。
安装包通常叫 linux-tools-$(uname -r)(Debian/Ubuntu 还有 linux-perf),版本必须与运行内核大致匹配,否则可能缺少事件或无法解析符号。普通用户默认只能做部分采样,需要调整 /proc/sys/kernel/perf_event_paranoid(例如设为 1)或以 root 运行;生产环境应通过 perf_event_paranoid 和 capabilities 精细授权。
典型流程:先用 perf stat 看整体指标,再用 perf record -g 采样、perf report 查看热点,需要内核栈时加 --call-graph dwarf 并安装调试符号。容器内使用需挂载 tracefs/perf 相关路径并放宽限制。
语法
perf [选项] 子命令 [子命令选项]
常用子命令
perf list 列出可用事件
perf stat 命令 统计命令执行的性能事件
perf record -g 命令 采样并写入 perf.data
perf report 交互式查看采样结果
perf top 实时显示热点函数
perf trace 追踪系统调用
perf sched latency 调度延迟统计
perf mem record / perf mem report 内存访问分析
perf probe 动态添加探针
选项
-e <事件>:指定事件,如cycles、instructions、cache-misses,可逗号分隔-g:记录调用图(call graph)-p <pid>:附加到指定进程-a:统计所有 CPU-F <频率>:采样频率,默认约 4000Hz--call-graph dwarf:用 DWARF 展开用户态调用栈--stdio:perf report以纯文本输出,便于脚本处理
实例
# 查看 CPU 周期、指令数和缓存未命中
perf stat -e cycles,instructions,cache-misses ls -R /usr
# 以 99Hz 采样整个系统的调用栈,持续 10 秒
sudo perf record -F 99 -a -g -- sleep 10
sudo perf report --stdio
# 只分析某个进程
sudo perf top -p "$(pgrep -n nginx)"
# 统计某命令的上下文切换与缺页
perf stat -e context-switches,page-faults make -j4
# 追踪命令产生的系统调用
perf trace -s curl -s https://example.com > /dev/null