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、生成火焰图效果
三、在容器中查看实时热点信息
参考:http://3ms.huawei.com/km/blogs/details/7849895
常用命令:
perf top -t pid -g-t
显示效果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?