perf抓取火焰图

一、Perf工具安装(压缩包在帖子下方的附件中)

*****************************ARM*****************************************
1.拷贝ARM.zip、lib64_arm.zip到需要安装的虚拟机或者Pod上
2.创建个独立目录,如perf
   mkdir perf
   mv ARM.zip perf
   mv lib64_arm.zip perf
   cd perf
3.解压、拷贝不覆盖原有so(-n)
   unzip ARM.zip
   unzip lib64_arm.zip
   cp ./lib64/* /usr/lib64/ -rn
4.安装perf工具
   cd  rpm-deps
   rpm -ivh *.rpm --force --nodeps --ignoresize
*****************************X86*****************************************
1.拷贝X86.zip、lib64.zip到需要安装的虚拟机或者Pod上
2.创建个独立目录,如perf
   mkdir perf
   mv X86.zip perf
   mv lib64.zip perf
   cd perf
3.解压、拷贝不覆盖原有so(-n)
   unzip X86.zip
   unzip lib64.zip
   cp ./lib64/* /usr/lib64/ -rn
4.安装perf工具
   cd  rpm-deps
   rpm -ivh *.rpm --force --nodeps --ignoresize
区分arm版本和x86版本执行命令:arch/uname -m
欧拉版本更新后,存在安装后执行perf命令提示缺少so的情况,则需要将附件中里lib64(arm版本为lib64_arm)压缩包拷贝到目标容器中/usr/lib64目录下,相同so不替换。

二、热点信息生成火焰图

1、容器外抓取热点信息生成火焰图

1.1、 将perf工具安装在vm上,安装方法参上,将perf所需依赖从docker中拷贝出来

docker cp 1967572122c7:/opt/depend /opt/depend
docker cp 1967572122c7:/opt/ccell /opt/ccell
docker cp 1967572122c7:/opt/http-server /opt/http-server
docker cp 1967572122c7:/opt/plat_libs /opt/plat_libs
1967572122c7 为sbim docker id

1.2、容器外查询worker pid、抓热点,生成perf.data文件

top -H -n 4 -d 3 -b > top.txt
perf record -g -o ./perf.data -p pid(对应worker的pid)
如果svg图出现unknown函数,使用如下(具体原理)
sudo perf record -e cpu-clock --call-graph dwarf -o ./perf.data -p xx(对应worker的pid)sleep xx(抓取时长,单位(秒),可选参数)

1.3、容器外(VM上)将perf.data转换为perf.unfold

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

1.4、从环境上取出,将环境上生成的perf.data和perf.unfold文件删除

将perf.unfold取出保存到windows本地
rm -f perf.unfold perf.folded

1.5、windows下载FlameGraph,生成火焰图perf.svg(FlameGraph工具见附件)

将环境生成的perf.unfold拷贝到FlameGraph目录下
FlameGraph目录下打开git bash执行如下命令:
./stackcollapse-perf.pl perf.unfold &> perf.folded
./flamegraph.pl perf.folded > perf.svg

1.6、生成火焰图后清除中间文件

FlameGraph目录下执行
rm -f perf.unfold perf.folded

2、容器内抓取热点信息生成火焰图

2.1、将perf工具压缩包上传到vm上,拷贝到docker内安装,安装方法参考第一步;

将压缩包拷贝到docker内,1967572122c7为dockerID:
docker cp xxx.zip 1967572122c7:/

2.2、进入容器、查询worker pid、抓热点,生成perf.data文件

docker ps | grep sbim
docker exec -it xxx bash (xxx为docker ps查出的sbimId)
ps afx
perf record -g -o ./perf.data -p xx(对应worker的pid) sleep xx(抓取时长,单位(秒),可选参数)
如果svg图出现unknown函数,使用如下(具体原理)
sudo perf record -e cpu-clock --call-graph dwarf -o ./perf.data -p xx(对应worker的pid)sleep xx(抓取时长,单位(秒),可选参数)

2.3、将perf.data转换为perf.unfold

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

2.4、生成火焰图 FlameGraph目录下打开git bash执行如下命令(FlameGraph工具见附件)

将环境生成的perf.unfold拷贝到FlameGraph目录下
FlameGraph目录下打开git bash执行如下命令:
./stackcollapse-perf.pl perf.unfold &> perf.folded
./flamegraph.pl perf.folded > perf.svg

2.5、生成火焰图后清除文件

FlameGraph目录下执行
rm -f perf.unfold perf.folded

3、生成火焰图效果

20210603213736.png

三、在容器中查看实时热点信息

参考:http://3ms.huawei.com/km/blogs/details/7849895
常用命令:

perf top -t pid -g-t

显示效果:
image.png

posted @   ·面具·  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示