应用内存测试分析

Posted v小周与海神

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用内存测试分析相关的知识,希望对你有一定的参考价值。

测试环境:
版本信息:
安装包大小:
系统环境:OPPO R7s
操作系统版本:4.4.4

该文章目的:

抛砖引玉,旨在描述和指导如何在android上测试与分析app的内存情况

术语释义

  • 空负荷:app已经在后台运行,但是用户没有使用;
  • 中负荷:app在前台运行,用户进行了少量操作;
  • 满负荷:用户持续频繁大量操作,app接近饱和状态运行。

一些经验:
除了第一种情况,其它两种的主观性很强,不是很容易区分。正常产品测试的时候,只要验证后台运行(510分钟为宜)和用户持续频繁大量操作(1015分钟为宜)这两种情况下就足够了;且可以借助安卓monkey脚本辅助。

第一步:用dumpsys meminfo 或 DDMS进行检测

通过adb shell获取应用运行时内存

adb shell dumpsys meminfo [$pid] or [$pkgName]

图解:
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

根据测试需要,一般会参考RSS和PSS,作为测试指标

通过DDMS Dump Heap进行检测/测试

图解:
Heap Size:系统分配给当前应用程序的总内存。对应读内存的代码: Runtime.getRuntime().totalMemory()
Allocated:应用程序当前占用的实际内存;
Free:分配的内存中的空闲内存。对应读内存的代码:Runtime.getRuntime().freeMemory()
三者之间的关系: Heap Size = Allocated + Free

第二步:反复执行具体场景,观察Heap Size和Allocated

  • 如何判断有leak
    Heap视图中有一行数据是叫data object,即数据对象。它是我们app中大量存在的类类型的对象。 在data object中有一列 Total Size ,它的值就是当前进程中所有java对象的内存总量。 一般情况下,这个值决定是否内存泄漏。
    所以,不断的操作某个场景(比如反复提交数据,反复加载数据),Total Size的值一般会稳定在一个正常范围内。内存会有一个先增加(不断的生成对象),后下降(对象被回收)。如果程序的代码处理良好,那么内存占用量会有一个明显的回落,并且稳定在一个正常水平。内存占用量就没有一个明显的回落,并且会越来越高,那么就意味着有leak,最终出现OOM,被虚拟机kill掉程序

第三步:利用MAT或YourKit进行分析

此处不描述,若感兴趣自行找些资料,比如http://blog.csdn.net/feng88724/article/details/6460918

补充--android检测内存泄漏的工具:

LeakCanary

参考资料
http://blog.csdn.net/yehui928186846/article/details/51387079
http://blog.csdn.net/feng88724/article/details/6460918
https://my.oschina.net/yyn2010/blog/112363
http://blog.csdn.net/duantihi/article/details/50791494
http://gdgzzch.blog.163.com/blog/static/37640452201371483147573/
http://hubingforever.blog.163.com/blog/static/17104057920114411313717/
https://developer.android.com/studio/profile/heap-viewer-walkthru.html

以上是关于应用内存测试分析的主要内容,如果未能解决你的问题,请参考以下文章

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

方法与对象内存分析

应用内存测试分析

67 基于lldb分析运行时数据

67 基于lldb分析运行时数据

变量的内存分析图