性能分析工具 —— flame graph 火焰图
程序员文章站
2022-04-16 22:56:07
flame graphBrendan D. Gregg发明了火焰图,可以一针见血的指出程序的性能瓶颈...
1. flame graph(火焰图)简介
Brendan D. Gregg 发明了火焰图,可以一针见血的指出程序的性能瓶颈。
2. simpleperf & perf
火焰图的绘制工具可以在这里下载:https://github.com/brendangregg/FlameGraph
3. 如何用simplepef + flame graph进行性能分析
Step 1:前期准备
将simpleperf程序push到手机的目录下。并修改其权限
adb push simpleperf /data/local/tmp/
adb shell chmod 777 /data/local/tmp/simpleperf
Step 2:数据收集
在Android设备上运行simpleper record
命令,如果执行成功将生成perf.data文件(存放收集的信息)。
如果只针对某个进程。就这么操作。例如我想查看android系统中camera的provider进程的情况。
ps -A | grep camera
cameraserver 890 1 1672076 42228 0 0 efg S android.hardware.camera.provider@2.4-service_64
cameraserver 1319 1 70512 7612 0 0 efg S cameraserver
u0_a102 24624 808 6039784 86788 0 0 efg S com.oppo.camera
890为你所要看的provider进程的
adb shell /data/local/tmp/simpleperf record -p 890 --duration 30
adb shell /data/local/tmp/simpleperf record -p [PID] -f [sample/s] --duration [Time]
Step 3:数据分析并生成火焰图
将生成的数据perf.data拷贝到本地。用
$python report_sample.py >out.perf
$stackcollapse-perf.pl out.perf >out.folded
$./flamegraph.pl out.folded > graph.svg
4. simpleperf 使用小技巧
- 查找最耗时的共享库
使用该命令可以查看最耗时的共享库文件
simpleperf report --sort dso
- 查找最耗时的函数
当你找到了最耗时的共享库,再使用该命令可以找到共享库中最耗时的函数
$ simpleperf report --dsos library.so --sort symbol
- 查看线程耗时百分比
$ simpleperf report --sort tid,comm
- 查找线程执行最耗时的目标模块(共享库)
在找到了最耗时的线程之后,使用该命令可以查找线程中最耗时的共享库
$ simpleperf report --tids threadID --sort dso
- 查看函数调用关系
simpleperf report -g 或者 reprot.py -g
本文地址:https://blog.csdn.net/dragon261622968/article/details/107293995
上一篇: 短视频风口持续,主播是如何用快手卖货的