Perf使用
Perf 是 Linux 内核自带的一个性能工具,基于
perf_events接口,用于监控和分析硬件及软件事件(如 CPU 周期、指令执行、缓存命中、系统调用等)。
安装
使用 which perf 查看是否已经安装 perf,如果已经安装可以跳过
yum install perf
常用命令
-
实时监控
实时显示占用 CPU 最多的函数(类似
top命令)。perf top -
统计程序运行指标
输出程序运行时的 CPU 周期、指令数、缓存命中率等统计信息。
perf stat ./your_program -
记录性能数据
生成
perf.data文件,后续用perf report分析。perf record ./your_program -
生成分析报告
交互式查看热点函数、调用链等。
perf report -
跟踪特定事件
自定义监控事件并统计。
perf stat -e cycles,instructions,cache-misses ./your_program
CPU飙高问题排查
使用 Perf 问题排查某个进程 CPU 飙高问题。
-
使用 top找到 cpu 飙高的程序 pid,比如 pid 为 12345
-
使用
perf record监控指定 PID# -F 99 代表每秒采样 99 次 perf record -F 99 -p 622794 --call-graph dwarf -- sleep 10 -
生成性能报告
运行
perf report分析生成的perf.data文件:sudo perf report -
输出示例
在
perf report中,看到如下内容。 可以看到sieve_of_eratosthenes(int)这个函数占用了几乎全部的CPU。
CPU火焰图
结合
perf script和FlameGraph工具生成可视化火焰图:
perf record -F 99 -p 622794 --call-graph dwarf -- sleep 10
perf script > out.perf
# 安装FlameGraph 已经安装可以忽略
wget https://github.com/brendangregg/FlameGraph/archive/master.zip
unzip master.zip
# stackcollapse-perf 和 flamegraph 是FlameGraph内的文件
FlameGraph-master/stackcollapse-perf.pl out.perf > out.folded
FlameGraph-master/flamegraph.pl out.folded > cpu_flamegraph.svg