simpleperf分析程序性能,生成火焰图
https://wiki.n.miui.com/pages/viewpage.action?pageId=459597422
定义
Simpleperf 是Google随NDK一起发布的一款profile工具(注:从NDK r13开始),它是针对Android平台的一个 native 层性能分析工具。
注意
支持的Python版本需要是3.9及其以上
本篇是分析运行在android设备下的程序
1.将NDK中Simpleperf工具的可执行程序 push 到手机上
cd
例如 :我的路径是 /home/zbc/Android/Sdk/ndk/26.2.11394342/simpleperf/bin/android/arm64
cd /home/zbc/Android/Sdk/ndk/26.2.11394342/simpleperf/bin/android/arm64
adb push simpleperf /data/local/tmp
adb shell chmod 777 /data/local/tmp/simpleperf2.启动手机上的被测程序,ps 出该程序的进程ID
adb shell ps -ef | grep `"需要分析的应用程序包名"3.使用Simpleperf工具进行分析
(1)record-记录运行结果数据:
adb shell /data/local/tmp/simpleperf record -p <进程号> --duration <持续的时间(秒为单位)> -o <输出文件名称> --call-graph fp --call-graph dwarf 用在32位系统中,64位则采用 --call-graph fp
例子:adb shell /data/local/tmp/simpleperf record -p 4844 --duration 10 -o /data/local/tmp/perf.data --call-graph fp
输出:simpleperf I cmd_record.cpp:658] Samples recorded: 12013. Samples lost: 0.
(2)报告结果数据
adb shell /data/local/tmp/simpleperf report -i /data/local/tmp/perf.data -o /data/local/tmp/perf_report.txt4.解析火焰图
<1>将data文件和txt文件,从手机pull到电脑
电脑上新建simpleperf_test目录,例子:/home/hqb/simpleperf_test
mkdir simpleperf_test
adb pull /data/local/tmp/perf.data /home/hqb/simpleperf_test
adb pull /data/local/tmp/perf_report.txt /home/hqb/simpleperf_test经常使用simpleperf就用alias设置别名
vim ~/.bashrc
alias pf=/home/zbc/Android/Sdk/ndk/26.2.11394342/simpleperf/report_html.py
// 最后不要忘记生效下
source ~/.bashrc<2> data格式转化成html格式
cd /home/hqb/simpleperf_test
//设置别名
pf -i ./perf.data -o ./perf.html
//如果不设置别名
python3 /home/hqb/Android/Sdk/ndk/21.3.6528147/simpleperf/report_html.py -i ./perf.data -o ./perf.html<3>下载FlameGraph到simpleperf_test目录下,将simpleperf复制到simpleperf_test目录下
git clone https://github.com/brendangregg/FlameGraph.git
chmod 777 FlameGraph/flamegraph.pl
chmod 777 FlameGraph/stackcollapse-perf.pl
cp -r /home/hqb/Android/Sdk/ndk/21.3.6528147/simpleperf /home/hqb/simpleperf_test<4>生成火焰图
cd /home/hqb/simpleperf_test
python ./simpleperf/report_sample.py >out.perf
./FlameGraph/stackcollapse-perf.pl out.perf > out.folded
./FlameGraph/flamegraph.pl out.folded >out.svg自动化脚本
当然上面的这些我已经总结成自动化脚本了,需要使用的同学可以下载对应脚本
git clone http://gitlab.tx2.898311.xyz/zbc/flame_dagram.git使用见
