Perf工具使用和生成火焰图

本文介绍了Linux系统自带的性能监控工具perf的使用,包括动态追踪技术、生成调用栈信息,以及如何创建火焰图来可视化CPU调用栈。文章详细讲解了perf的安装过程,解决安装和使用中可能遇到的问题,如权限设置和依赖库的安装。最后,阐述了如何采样和生成火焰图,以帮助分析性能瓶颈。
摘要由CSDN通过智能技术生成

一、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就是我们要的火焰图了,这个我们可以直接在阅览器中查看就可以了

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值