性能分析工具 —— flame graph 火焰图

1. flame graph(火焰图)简介

 Brendan D. Gregg 发明了火焰图,可以一针见血的指出程序的性能瓶颈。

性能分析工具 —— flame graph 火焰图_第1张图片

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 [email protected]_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

 

 

你可能感兴趣的:(性能分析工具 —— flame graph 火焰图)