Perf工具使用和生成火焰图

一、Perf工具和火焰图简介

perf是Linux 系统自带的系统性能监控工具,它可以对指定的进程或者事件进行采样,并且以调用栈的形式,输出整个调用链上的调用信息。同时perf也能对系统内核线程进行分析,在分析时内核线程依然还在正常运行中,所以这种方法也被称为动态追踪技术。
火焰图是基于 perf 结果产生的 SVG 图片,用来展示 CPU 的调用栈。火焰图是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。

二、安装perf工具和火焰图生成工具

虽然perf在linux内核中有,但是有时候不能直接使用,需要自己安装

1、准备工作

本次使用ubuntu 20.04。不进行交叉编译,直接在虚拟机上使用perf

1、下载perf源码

perf工具源码位于linux内核目录的tools下的perf文件夹中,只需要找一个对应内核版本的源码下载即可。
当然也可以直接在下面链接中下载

http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

2、下载生成火焰图的工具

可以直接克隆下面的链接

git clone https://github.com/brendangregg/FlameGraph.git

三、安装perf工具

1、安装

将刚刚下载过的perf压缩包拿到linux下进行下面的操作

tar -xvf perf-5.9.0.tar.gz 
cd perf-5.9.0
cd tools/perf/
make
sudo cp perf /usr/bin

或者下载内核时直接把tools文件夹给拷出来

cd kernel/tools
make perf
sudo cp perf /usr/bin

这个时候就可以使用了。

2、整理perf使用的环境

在做好上面的步骤后可以输入下面的尝试一下

perf record -F 99 -a -g -- sleep 10

这个时候可能会出现一些东西
如:

1.
WARNING: perf not found for kernel 版本号

这个时候,需要安装对应版本的linux-tools-generic和linux-cloud-tools-generic

sudo apt-get install linux-tools-版本号-generic 
sudo apt-get install linux-cloud-tools-版本号-generic 
如果按不成就直接按下面的
sudo apt-get install linux-tools-generic 
sudo apt-get install linux-cloud-tools-generic

如果还报这个错误,就进行下面的操作

sudo rm /usr/bin/perf
ln -s usr/bin/perf /usr/lib/linux-tools/perf
2.当出现
ccess to performance monitoring and observability operations is limited 

表明perf需要权限才能使用

sudo su
echo -1 > /proc/sys/kernel/perf_event_paranoid 临时性的
或者
sudo vi /etc/sysctl.conf  永久性的
输入 kernel.perf_event_paranoid= -1
3.出现缺少库的,就直接apt-get install就可以了

四、使用和生成火焰图

在刚刚下载出来的FlameGraph文件夹中

#使用命令进行采样
sudo perf record -F 99 -p pid号 -g -- sleep 60
		-F 采样频率 目前执行频率是99Hz
		-p 要监测的pid号
		-g 表示记录调用栈
		sleep 代表要记录多少秒
#这个就可以看原生的perf输出
sudo perf report -n --stdio
#首先使用 perf script 工具对上面生成的 perf.data 进行解析:
sudo perf script -i perf.data &> perf.unfold
# 生成火焰图
./stackcollapse-perf.pl perf.unfold &> perf.folded
#最后生成 svg 图:
./flamegraph.pl perf.folded > perf.svg

最后生成的perf.svg就是我们要的火焰图了,这个我们可以直接在阅览器中查看就可以了

你可能感兴趣的:(linux,ubuntu)