Android性能分析之 Profiler

Android studio的分析工具分为:CPU、Memory、NetWork、Energy.

CPU Profiler:

从Android profiler面板选择指定设备和应用程序进入到CPU Profiler界面,我们能够直观的看到CPU的使用情况和线程的情况.


image.png

分别介绍下相关标号的CPU Profiler的相关功能:
1.事件时间轴:表示当前分析的应用程序随着用户交互在不同活动的变化状态 .
2.CPU状态:表示当前应用CPU使用率和系统及其他的CPU使用率.
3.线程活动时间轴:列出当前应用的所有线程,并标识出其在时间轴上的状态.

绿色:线程处于运行状态或者是可运行状态;
黄色:线程处于活动状态,它正在等待I / O操作完成后继续工作;
灰色:线程处于休眠状态,不会占用任何 CPU 时间.

4.方法跟踪配置:选择方法跟踪的模式:
Sampled:一种基于数据抽样的跟踪,分析器会在应用执行期间频繁地捕获应用程序的调用堆栈,通过收集比对捕获到的数据集来获得有关应用程序代码执行的时间和资源使用信息,适合跟踪生命周期相对较长的方法,如果应用在捕获调用堆栈后进入一个函数并在下一次捕获前退出该函数,则分析器不会记录该函数调用.
Instrumented: 以函数调用时间为周期记录,在运行时设置应用以在每个函数调用的开始和结束时记录时间戳,它收集时间戳并进行比较,以生成函数跟踪数据,包括时间信息和 CPU 使用率.与设置每个函数关联的开销会影响运行时性能,并可能会影响分析数据,对于生命周期相对较短的函数,这一点更为明显.如果应用短时间内执行大量函数,则分析器可能会迅速超出它的文件大小限制,且不能再记录更多的跟踪数据。
Edit configurations:允许更改上述“Sampled”和“Instrumented”记录配置的某些默认值,并将它们另存为自定义配置。
5. 用于开始和停止记录函数跟踪.
6.放大/缩小时间线
7.跳转至实时时间线

记录、检查函数跟踪

在4处选择Sampled或者Instrumented,然后在5处开始记录函数跟踪,再结束函数跟踪:

image.png

从图中可以发现有四种方式检查函数跟踪:
Call Chart
水平轴表示函数调用(或调用方)的时间,并沿垂直轴显示其被调用者。 对系统 API 的函数调用显示为橙色,对应用自有函数的调用显示为绿色,对第三方 API(包括 Java 语言 API)的函数调用显示为蓝色。 下图展示了一个调用图表示例,并描绘了给定函数的 Self time、Children time 以及总时间的概念。
相关函数可以右键Jump to source.
Flame Chart
Flame Chart 标签提供一个倒置的调用图表,其中水平轴不再代表时间线,它表示每个函数相对的执行时间。
image.png

Top Down
Top Down 标签显示一个函数调用列表,在该列表中展开函数节点会显示函数的被调用方.
image.png

左边显示了函数调用列表,右边分别显示了函数执行时间和函数执行的被调用方所花时间,和总时间.
Bottom Up
标签显示一个函数调用列表,在该列表中展开函数节点将显示函数的调用方.
image.png

Memory Profiler:

内存分析,根据进入内存分析界面,先介绍CPU界面没有的指标:

image.png

1:用于强制内存回收.
2:抓取进程内存的dump信息.
3:内存分配的占比及对象个数.
4:虚线表示对象的分配数.
5:拉动时间线选取待分析的时间段的内存信息.
6:内存信息.
从6中可以观察到类的信息,点击相关类可以观察到对象信息,点击相关实例,可以观察到调用栈信息,点击调用栈可以跳转至相关代码.

内存分配:
可以查看的信息:分配哪些类型的对象以及它们使用多少空间,每个分配的堆叠追踪,包括在哪个线程中,对象在何时被取消分配(Android 8.0+)。

捕获堆转储

堆转储显示在捕获堆转储时应用中哪些对象正在使用内存,尤其是在长时间的用户会话后,堆转储会显示您认为不应再位于内存中却仍在内存中的对象,从而识别内存泄漏,在捕获堆转储后,可以查看以下信息:

应用已分配哪些类型的对象,以及每个类型分配多少;每个对象正在使用多少内存;在代码中的何处仍在引用每个对象;对象所分配到的调用堆栈(目前,如果在记录分配时捕获堆转储,则只有在 Android 7.1 及更低版本中,堆转储才能使用调用堆栈)

要捕获堆转储,在 Memory Profiler 工具栏中点击 Dump Java heap ,在转储期间,Java 内存量可能会暂时增加,这很正常,因为堆转储与您的应用发生在同一进程中,并需要一些内存来收集数据。


image.png

在类列表中,可以查看以下信息:

Shallow Size:此堆中所有实例的总大小(以字节为单位)。
Retained Size:为此类的所有实例而保留的内存总大小(以字节为单位)

在类列表顶部,可以使用左侧下拉列表在以下堆转储之间进行切换:

Default heap:系统未指定堆时。
App heap:应用在其中分配内存的主堆。
Image heap:系统启动映像,包含启动期间预加载的类。 此处的分配保证绝不会移动或消失
Zygote heap:写时复制堆,其中的应用进程是从 Android 系统中派生的。

默认情况下,此列表按 Retained Size 列排序,可以点击任意列标题以更改列表的排序方式。
在 Instance View 中,每个实例都包含以下信息:

Depth:从任意 GC root 到所选实例的最短 hop 数。
Shallow Size:此实例的大小。
Retained Size:此实例支配的内存大小。

将堆转储另存为 HPROF

右键将堆转储导出到一个 HPROF 文件中,在显示的对话框中,确保使用 .hprof 后缀保存文件;然后,通过将此文件拖到一个空的编辑器窗口就可以在 Android Studio 中打开该文件。
要使用其他 HPROF 分析器(如 jhat),需要将 HPROF 文件Android 格式转换为 Java SE HPROF 格式。 可以使用 android_sdk/platform-tools/ 目录中的 hprof-conv 工具执行此操作。 运行该命令需要两个参数:原始 HPROF 文件和转换后 HPROF 文件的写入位置。 例如:
hprof-conv heap-original.hprof heap-converted.hprof

Network Profiler

时间线上显示实时网络 Activity,包括发送和接收的数据以及当前的连接数,便于查看应用传输数据的方式和时间,并据此对底层代码进行适当优化。


image.png

选择相应的时间段,对网络的请求,响应和调用栈以及网络状况进行分析.

Energy Profiler

打开Energy Profiler时,它会立即开始显示应用程序的估计能耗:查看CPU,网络和位置(GPS)资源以及相关系统事件的能耗分类,请将鼠标指针放在 能源时间轴中的条上


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268