目录
- 一、Perf工具安装(压缩包在帖子下方的附件中)
- 二、热点信息生成火焰图
- 1、容器外抓取热点信息生成火焰图
- 2、容器内抓取热点信息生成火焰图
- 3、生成火焰图效果
- 三、在容器中查看实时热点信息
一、Perf工具安装(压缩包在帖子下方的附件中)
*****************************ARM*****************************************
1.拷贝ARM.zip、lib64_arm.zip到需要安装的虚拟机或者Pod上
2.创建个独立目录,如perfmkdir perfmv ARM.zip perfmv lib64_arm.zip perfcd perf
3.解压、拷贝不覆盖原有so(-n)unzip ARM.zipunzip lib64_arm.zipcp ./lib64/* /usr/lib64/ -rn
4.安装perf工具cd rpm-depsrpm -ivh *.rpm --force --nodeps --ignoresize
*****************************X86*****************************************
1.拷贝X86.zip、lib64.zip到需要安装的虚拟机或者Pod上
2.创建个独立目录,如perfmkdir perfmv X86.zip perfmv lib64.zip perfcd perf
3.解压、拷贝不覆盖原有so(-n)unzip X86.zipunzip lib64.zipcp ./lib64/* /usr/lib64/ -rn
4.安装perf工具cd rpm-depsrpm -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
显示效果: