【 Android 场景化性能测试】内存性能及内存泄漏篇

作者:陈帅团队:腾讯移动品质中心TMQ

一、数据源

APP占用内存的测试,要比CPU的更为简单。App memory数据来源是dumpsys meminfo。当然,首先需要了解清楚dumpsys里面这些数值的含义是什么,这里不详述。

Android程序内存主要是两部分:native和dalvik。dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是native+dalvik 不能超过最大限制,否则OOM。

图一dumpsys meminfo信息

二、数据采集

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

图二内存信息收集逻辑

三、数据使用

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

图三内存泄漏示意图

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

图四DDMSdump内存

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

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

Android Studio的分析不够强大,也可以借助MAT来分析内存泄漏:更多内容参考http://blog.csdn.net/cleverGump/article/details/52013873。

在链接内容中,可以关注下GIMP相关的内容,因为在APP中因为内存泄漏引起OOM一般会跟图片有关,其他对象往往没有bitmap对象大,所以解决图片相关的内存泄漏是优先级非常高的。

篇幅有限,还有很多深入的内容无法一一铺陈,后续将继续深入学习内存泄漏测试的相关内容。

搜索微信公众号:腾讯移动品质中心TMQ,获取更多测试干货!

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

2018-11-07 Drools业务逻辑框架

大部分 web 以及企业级 Java 应用可被分成三部分:与用户交互的前台,与数据库这样的后台系统交互的服务层,以及它们之间的业务逻辑。最近这段时间,通常我们会...

403
来自专栏数据之美

基于 Hive 的文件格式:RCFile 简介及其应用

Hadoop 作为MR 的开源实现,一直以动态运行解析文件格式并获得比MPP数据库快上几倍的装载速度为优势。不过,MPP数据库社区也一直批评Hadoop由于文...

3915
来自专栏Golang语言社区

Go的单元测试技巧

本文为社区粉丝原创投稿,再次感谢作者DrmagicE的分享,欢迎大家在评论区留言和作者讨论,同时也欢迎大家踊跃投稿,分享您的golang语言学习经验!投稿邮箱地...

702
来自专栏Java进阶架构师

dubbo专题-深入分析zookeeper连接原理

上篇的dubbo源码解析-远程暴露中讲解了远程暴露的大致过程,但是期间大家也发现了,这个过程涉及到了很多分支,比如netty,zookeeper.当然设计模式就...

1452
来自专栏极客生活

数据分析python技能之es数据提取

Elasticsearch 公司的产品栈非常全面,打通数据采集,传递,存储,展示,而且部署简单快速,半天时间就可以搭建一套完整的POC出来。

903
来自专栏SDNLAB

SDDC新生力量:F5 BIG-IP & VMware NSX

过去10年中,企业为了享受软件计算和存储资源的灵活性迅速地接纳了网络虚拟化。SDN和虚拟化新用例软件定义数据中心(SDDC)越来越受欢迎。随着F5和VMware...

3349
来自专栏李想的专栏

使用腾讯云无服务器云函数(SCF)分析天气数据

无服务器云函数(SCF)是腾讯云提供的Serverless执行环境,也是国内首款FaaS(Function as a Service,函数即服务) 产品。其核心...

8727
来自专栏杨建荣的学习笔记

和开发同学讨论的一个技术问题(r8笔记第73天)

今天下午的时候,有一位开发同事找我,说有一个技术问题想请教一下。 当然正如他所说,这个问题比较奇怪,而且已经影响了他的测试流程,他说有一个表查看对应的表空...

2755
来自专栏铭毅天下

干货 |《从Lucene到Elasticsearch全文检索实战》拆解实践

1、题记 2018年3月初,萌生了一个想法:对Elasticsearch相关的技术书籍做拆解阅读,该想法源自非计算机领域红火已久的【樊登读书会】、得到的每天听本...

1.6K6
来自专栏更流畅、简洁的软件开发方式

【自然框架】用CMS的栏目举例,聊一聊从“一层”到“三层”的变化

  做CMS最基本的一个功能就是做一个栏目导航,如果这个导航想做成动态的(即需要从数据库里提取数据)那么要如何实现呢? 简单的方法——DataTable   ...

2089

扫码关注云+社区