Android内存性能测试
活动时间:2016年10月31日 QQ群视频交流
活动介绍:TMQ在线沙龙第十一期分享
本次分享的主题是老司机给大家分享android内存性能测试。
共有104位测试小伙伴报名参加活动,在线观看视频人数52人~想知道活动分享了啥吗?往下看吧!
活动嘉宾
嘉宾简介
张志伟,腾讯高级测试工程师,目前负责手机管家的性能测试及优化。有多年的前后台性能测试经验。
分享主题
问答环节
1、提问:内存测试是否能精准的定位到出现问题的方法,该如何做?
答:使用MAT等工具通常能定位到出现问题的类,然后结合代码分析。查找代码中使用到这些类的地方,看这些类是在什么地方被创建的,就能够找到出现问题的方法。
2、提问:如果测试内容是某个SDK,该如何着手设计?
答:1).通常是单独写一个测试应用,以排除其他可能的干扰项。调用sdk模拟实现一些功能并进行测试,得到性能数据。
2).但要注意的是测试应用不能完全体现合入应用后的表现。
3).比如在测试应用里,SDK调用某些API消耗了内存的情况比较明显,但在真正的应用里已经使用过这些API,那SDK消耗的内存就不明显了。
3、提问:长时间运行出现的内存问题该如何复现和定位?
答:1).可以使用APT或脚本进行长时间的记录,观察内存曲线的图像,也许能发现问题特征。
2).还可以定期dump内存,然后进行比较,看新增了哪些对象。
4、提问:请问我们只需要关注Dalvik的就可以了吗? Native的内存要不要关注?
答:通常应用的代码都是在dalvik部分执行的,除非调用了jni库。一般我们可以只关注native heap整体,当发现异常后再使用valgrind等工具详细分析。
5、提问:我们是应该用PSS来衡量应用内存?还是USS来衡量?或者说,在什么情况下,用PSS准确一些,还是USS准确一些?
答:PSS更加准确一些,系统统计内存时也是按PSS算的。对于多进程架构的应用,USS的值会出现失真。
6、提问:请问我们想将内存等性能测试应用于monkey自动化测试中,执行monkey压测时候,能收集到手机内存变化数据,让我们在monkey运行完成之后画出相应的内存变化曲线。请问有没有什么好的工具能支持呢
答:APT可以支持画图。http://opensource.tencent.com/apt.html
7、提问:因为目前测试过程中我们公司遇到一个因为测试版本无debug权限只有在问题发现后才能回头来打开debug权限,请问有什么方案可以实时监控住所有对象的生成与销毁并记录?
答:实时监控目前没有很好的方案。debug权限可以通过使用userdebug模式的手机获得,并可以用allocation tracker短时间监控对象的生成。
8、提问:针对使用小对象过多,导致的内存碎片占用多的问题,一般有哪些解决方案,优化后有没有哪些比较容易出现的引入问题?
答:内存碎片产生的原因之一是有大量的临时对象,可以用按需生成的方案,就不容易产生。也可以考虑用临时进程的方案,将这类操作放到临时进程中,再将结果传回原进程保存。
9、提问:系统api部分,性能测试报告中是不是有这类的消耗分析?如果有的话这部分一般是否提出优化建议?是否需要详细到针对各个类的消耗做分析?
答:很难独立列出系统api消耗的内存,常见情况是比较两个版本时发现问题,并追查到使用了新的api。
10、提问:不同系统,使用了不同的虚拟机 dalvik和art分析上有没啥区别呢?
答:dalvik和art各类内存的分布不同,各项差别较大。不能将两个版本
11、提问:dumpsys meminfo 里的unknown项有没啥好的分析方法呢?
答:unknown项主要是虚拟机里的一些分配内存的操作没有打标签,可以换更高版本的其他手机,通常从4.4.4起unknown项就会少很多。
12、提问:内存碎片产生的场景包括哪些, 有效的测试工具或者原理可以介绍一下吗?
答: 内存碎片产生的原因是:
1). 需要创建一批较小并且生命周期较长的对象。
2). 创建这批对象是会产生大量的临时对象,在创建后释放。
3). 虚拟机没有内存压缩整理的功能。
更详细的内容请见TMQ的这篇文章:http://tmq.qq.com/2015/12/%e6%89%8b%e6%9c%ba%e7%ae%a1%e5%ae%b6%e5%86%85%e5%ad%98%e4%bc%98%e5%8c%96-2/
暂时还没有集成的工具,是通过MAT和脚本分析的。
13、提问:常见的内存泄漏场景能举例说下吗?
答: TMQ有很好的文章详细介绍了内存泄漏相关的问题,建议去看下。
14、提问:通过自动化脚本获取数据后,如何去分析和定位具体的问题
答: 分析数据,根据出现问题的不同类型内存和现象,针对性的进行更进一步的测试。
15、提问:android 内存的性能分析,一般在项目的什么阶段开展比较合适
答: 性能测试分析的时间成本可能较高,一般是在集成阶段。如果能够自动化采集性能数据,可以提前一些。
16、提问:每个程序都会存在内存泄露,一般在测试那个阶段易被发现 ,如何去避免内存泄露
答: TMQ有很好的文章详细介绍了内存泄漏相关的问题,建议去看下。
17、提问:测试内存泄露怎么测试的
答: TMQ有很好的文章详细介绍了内存泄漏相关的问题,建议去看下。
18、提问:apt的使用好像没介绍
答: 时间关系,这篇文章讲的比较详细。
http://www.csdn.net/article/1970-01-01/2819366
19、问题: 问题+手机在运行时,后台会自己调用多个程序,怎么排除测试数据中的来自第三方的干扰?
答: 内存测试一般不存在这个问题,所有取内存数据的行为都是针对指定进程的,不会取到其他应用进程的数据。
获奖名单
ID:去哪儿测试(125****23)
ID:球盲--YY--测试(119****03)
ID:jessic_boya--测试(854****91)
恭喜以上三位同学获得TMQ本次沙龙活动听众奖;
本次奖品是由TMQ 官方出品《移动App性能评测与优化》新书哦