欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-11-02 11:08:42
flame graphBrendan D. Gregg发明了火焰图,可以一针见血的指出程序的性能瓶颈...

1. flame graph(火焰图)简介

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

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

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