Linux 命令速查
系统管理 man perf

perf

Linux 内核自带的性能分析工具,用于采样、计数和追踪。

返回

补充说明

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

参考链接