perf/Simpleperf 生成火焰圖

白伟碧一些小心得發表於2024-04-22

參考:

https://blog.csdn.net/weixin_43297891/article/details/137241935

https://hqber.com/archives/483/

定義

Simpleperf 是Google隨NDK一起釋出的一款profile工具(注:從NDK r13開始),它是針對Android平臺的一個 native 層效能分析工具。

使用步驟

本篇是分析執行在android裝置下的程式

1. 將NDK中Simpleperf工具的可執行程式 push 到手機上

cd <NDK>/simpleperf/bin/android/<對應的版本,根據被測程式和CPU,來選擇對應的版本>

例如 :我的路徑是 /home/hqb/Android/Sdk/ndk/21.3.6528147/simpleperf/bin/android/arm64

cd /home/hqb/Android/Sdk/ndk/21.3.6528147/simpleperf/bin/android/arm64
adb push simpleperf /data/local/tmp
adb shell chmod 777 /data/local/tmp/simpleperf

2. 啟動手機上的被測程式,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.txt

4. 解析火焰圖

(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='python /home/hqb/Android/Sdk/ndk/21.3.6528147/simpleperf/report_html.py'
source ~/.bashrc

(2)data格式轉化成html格式

cd /home/hqb/simpleperf_test

//設定別名
pf -i ./perf.data -o ./perf.html

//如果不設定別名
python /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

out.svg就是最後得到的火焰圖,用瀏覽器開啟就可以看

相關文章