专栏首页陈帅的专栏Android 性能测试之内存性能及内存泄漏篇
原创

Android 性能测试之内存性能及内存泄漏篇

性能测试-内存性能及内存泄漏篇

数据源

APP占用内存的测试,要比CPU的更为简单。App memory数据来源是dumpsysmeminfo。Android程序内存主要是两部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是native+dalvik不能超过最大限制,否则OOM。

图一dumpsysmeminfo信息

数据采集

与CPU耗电jiffs数据的采集一致,直接继承Performace基类,然后使用threading.Timer定时器来每隔3秒运行一次__fun_get_mem,调用dumpsysmeminfo来获取相关内存信息。如下图中,只收集了TOTAL的数据,如果要具体分析native和dalvik的内存信息,也可以将其数据单独过滤出来保存。start()在主路径的set_up()中调用,保证在执行test() UI自动化场景用例时,定时器一直在收集数据,直到tear_down()调用stop()将定时器取消。

图二 内存信息收集逻辑

数据使用

评估一个使用场景是否存在内存泄漏,如从APP首页进入一个二级页面,我们只需要将这个操作封装成UI自动化,重复执行N遍,即可获得如下数据曲线。只要数据曲线不是如下图中的灰色平缓曲线,则可以证明该场景是有内存泄漏的。

图三 内存泄漏示意图

同样,如果只提供上述的曲线给开发,定位问题也会比较麻烦,测试在内存泄漏的测试中,也可以多做一些。如果是Dalvik内存泄漏,也可以使用Android Device Monitordump出一份hprof文件(别忘了先手工Cause GC)。

图四DDMSdump内存

拿到hprof文件后,可以导入Android Studio中查看,一般查看Retained Size占用最大的类,分析是否有内存泄漏,一个对象的 Shallow Heap, 指的是该对象自身占用内存的大小。一个对象的 Retained Heap, 指的是当该对象被GC回收时, 所释放掉的内存大小。由于该对象先前可能直接或间接持有对其他多个对象的引用,那么当它自己被回收时,被它所引用的其他对象有些也可能会被回收,所以这种情况下,该对象的 Retained Heap 既包括他自身占用内存的大小,也包括所有被它直接或间接引用的某些对象占用内存的大小。

图五 使用Android Studio查看内存泄漏

Android Studio的分析不够强大,也可以借助MAT来分析内存泄漏:更多内容。在链接内容中,可以关注下GIMP相关的内容,因为在APP中因为内存泄漏引起OOM一般会跟图片有关,其他对象往往没有bitmap对象大,所以解决图片相关的内存泄漏是优先级非常高的。

笔者目前水平止步于此,后续将继续深入学习内存泄漏测试的相关内容。

文章来源于:腾讯移动品质中心 TMQ

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 坎坷之下出新招:记一次应用带宽峰值测试的探索历程

    最近在做一场流量性能测试,期望得到的结果,既不是应用关键场景需要使用的流量总量,也不是应用跑起来后的平均带宽值。而是一个叫带宽峰值的玩意儿,它代表一段时间内,这...

    陈帅
  • 小心!做 UI 自动化一定要跨过这些坑

    “才刚写完用例,怎么开发大哥又改了UI了?” “维护这些破用例的时间,都够我手工测三遍了,真的有意义么?” “这破手机,能不能别老是系统弹框……”

    陈帅
  • Android 性能测试之 CPU 耗电性能篇

    现有的耗电性能测试,除了高端深入带着原理去测试的方法,大多数都是读取系统文件或采用工具获取整体手机电流值,这样的方法受影响的因素多,数据波动大,可信度不高,同时...

    陈帅
  • Android 开发如何做好内存优化

    Android的一个应用程序的内存泄露对别的应用程序影响不大。为了能够使得Android应用程序安全且快速的运行,Android的每个应用程序都会使用一个专有...

    非著名程序员
  • 深入理解JVM(六)——JVM性能调优实战

    如何在高性能服务器上进行JVM调优? 为了充分利用高性能服务器的硬件资源,有两种JVM调优方案,它们都有各自的优缺点,需要根据具体的情况进行选择。 1. 采用...

    大闲人柴毛毛
  • Linux内存被吃掉了,它去哪里了?

    在Windows下资源管理器查看内存使用的情况,如果使用率达到80%以上,再运行大程序就能感觉到系统不流畅了,因为在内存紧缺的情况下使用交换分区,频繁地从磁盘上...

    小小科
  • Linux吃掉了我的内存

    在Windows下资源管理器查看内存使用的情况,如果使用率达到80%以上,再运行大程序就能感觉到系统不流畅了,因为在内存紧缺的情况下使用交换分区,频繁地从磁盘上...

    马哥linux运维
  • LINUX内存高,触发OOM-KILLER问题解决

    Linux alarm 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 i686 i386

    一见
  • 【转】Linux内存管理(最透彻的一篇)

    摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引...

    用户3033338
  • Linux内存管理(最透彻的一篇)【转】

    转自:https://www.cnblogs.com/ralap7/p/9184773.html

    用户3033338

扫码关注云+社区

领取腾讯云代金券