跳到主要内容

Linux perf 命令 - 性能分析与剖析

介绍

perf 是 Linux 内核自带的性能分析工具,基于 perf_events 子系统,可用于统计 CPU 性能计数器、记录函数调用栈、分析热点函数、跟踪调度延迟等。广泛应用于应用性能调优、内核开发和系统瓶颈排查。

perf 命令由 linux-tools 软件包提供,在 Debian/Ubuntu 系统上可以使用如下命令进行安装(版本需与内核匹配)。

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

语法

perf [--version] [--help] [OPTIONS] COMMAND [ARGS]

常用子命令

子命令说明
stat运行命令并收集性能计数器统计
record记录性能数据到 perf.data
report读取 perf.data 并显示分析报告
top实时显示性能热点(类似 top)
list列出可用的性能事件
annotate显示带注释的汇编代码
script将 perf.data 转为可脚本处理的文本
diff比较两次 profile 的差异
probe定义动态跟踪点(kprobe/uprobe)
trace跟踪系统调用(类似 strace)
sched分析调度器相关事件
mem分析内存访问
lock分析锁竞争
bench运行内置基准测试
version显示 perf 版本

相关命令:stracecrashkdump

示例

1、统计命令的 CPU 周期、指令数和缓存命中率:

perf stat ls -R /usr

2、记录程序的调用栈(采样 10 秒):

perf record -g -F 99 sleep 10
perf report

3、实时查看系统热点函数:

sudo perf top

4、记录指定进程的性能数据:

perf record -g -p $(pidof myapp)
perf report

5、列出所有可用的性能事件:

perf list

6、跟踪程序的系统调用:

perf trace ls

7、比较两次 profile 的差异:

perf record -o before.data -g ./myapp --arg1
perf record -o after.data -g ./myapp --arg2
perf diff before.data after.data

8、将 perf.data 导出为文本供脚本分析:

perf script -i perf.data > trace.txt

9、分析特定函数的汇编热点:

perf annotate main