1. perf安装

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

2. perf使用

perf的top/record等操作都需要root权限

2.1. perf top

perf top 是实时显示系统/进程的性能统计信息

perf top 常用参数

argnotes
-e指定性能事件
-a显示所有cpu上的性能统计信息
-C显示指定cpu上的性能统计信息
==-p==指定进程PID
==-t==指定线程TID
-K隐藏内核同级信息
-U隐藏用户控件统计信息
-s指定待解析的符号信息

2.2. perf record

可以记录event发生时详细的数据(堆栈等信息,系统/进程的性能时间),可以自定义需要的event

perf record常用参数

argnotes
-e选择性能事件
-p待分析进程的id
-t待分析线程的id
-a分析整个系统的性能
-C只采集指定CPU数据
-c事件的采样周期
-o指定输出文件,默认为perf.data
-A以append的方式写输出文件
-f以OverWrite的方式写输出文件
-g记录函数间的调用关系
-F采样评率,采样频率建议在4000以内,避免造成太多开销
Bash
sudo perf record -g -p 10086

3. 火焰图

Bash
wget https://github.com/brendangregg/FlameGraph/archive/master.zip
unzip master.zip
sudo mv FlameGraph-master/ /opt/FlameGraph
Bash
export PATH=$PATH:/opt/FlameGraph

4. 例子

4.1. 采样数据

Bash
sudo perf record -e cpu-clock -g -p 28591

4.2. 解析数据

Bash
sudo perf script -i perf.data &> perf.unfold

4.3 对符号进行折叠

Bash
stackcollapse-perf.pl perf.unfold &> perf.folded

4.4. 生成svg图

Bash
flamegraph.pl perf.folded > perf.svg