背景

Android客户端性能测试部分,通常是指客户端的安卓应用层面的性能测试,这里的关注点为应用的性能测试。

应用的性能测试通常包括多种测试,如:内存,cpu,GPU,耗电量,流量,启动时间等等,对于应用的性能测试,如启动时间,内存,cpu等测试通常是通过使用外部提供的第三方工具来辅助测试,如腾讯的GT,安测试等工具,这些工具都是通过基于调用android底层的一些api来获取测试所用的值;当然,也可以使用android自身提供的一套adb指令完成上述测试。而GPU,耗电量,流量等测试,用第三方工具进行测试获得数据就不那么准确了,通过会利用硬件工具来完成相关测试,下面对Android客户端app的几种内存测试方式进行简单整理。

性能测试之内存测试

内存测试主要是为了检测被测试应用在进行正常使用情况下,该应用消耗手机内存的情况,如果内存消耗过大就造成手机使用卡顿等现象,进而影响用户体验,甚至会影响日活数据和用户留存等情况。因此,通常情况下,移动端应用内存占用大小也是产品一个比较重要的关注点和测试重点。为了保证应用不占用过多的系统资源,且能够及时释放内存,保证整个系统的稳定性,关于内存测试需要引入几种概念:

1、  空闲状态:指打开应用后,点击home键让应用后台运行,此时应用处于的状态叫做空闲

2、  中等规格:对应用的操作时间的间隔长短不一,中等规格时间较长

3、  满规格:对应用的操作时间的间隔长短不一,满规格时间较短

测试时,可根据用户的操作习惯进而设置应用使用等级设置。下面是对几种内存测试方法进行整理,可根据不同的测试场景和需求,选择对应测试方案以便获取相对准确的内存数据。

目前存在的android的内存测试方法可以分为以下几类:

1、  使用Android自身提供的 ActivityManager.MemoryInfo() 方法获得,通过该方法获取某应用的内存信息。目前网易Emmagee,腾讯的GT等工具都是通过该方法实现某应用内存数据的获取,测试简单方便,安装app以后选中对应的应用即可开始测试,完成测试后即可在本地sd卡中保持一份性能测试的数据,可从里面获取内存信息。

2、  使用android提供adb指令集获取内存信息即adb shell dumpsys meminfo | grep packagename or pid 来获取

2.1、dumpsys获取内存数据

指令:adb shell dumpsys meminfo

通过上述指令可以查看所有应用的内存消耗情况

如果想查看某一应用或某一个进程的详细的内存信息,可用如下指令:

指令:adb shell dumpsys meminfo packagename or pid

从上面的Heap size类别中包含Native Heap和Dalvik Heap两部分Heap,其中dalvik就是平时说的java堆,我们创建的对象都在这里分配的。其中,dalvik heap不能超过最大限制,超过最大限制就会出现OOM;

2.2、查看单个应用程序最大内存限制的指令:

adb shell getprop | grep or findstr heapgrowthlimit

上述查看到的单个内存最大限制为128MB,而meminfo里面dalvik heap size的最大值如果超过了128M就可能出现OOM。dalvik.vm.heapgrowthlimit和dalvik.vm.heapsize都是java虚拟机的最大内存限制,应用如果不想在dalvik heap达到heapgrowthlimit限制的时候出现OOM,需要在Manifest中的application标签中声明android:largeHeap=“true”,声明后,如果应用的dalvik heap 达到heapsize的时候才会出现OOM!另:设备不一样,最大内存的限制也可能不一样

C/C++申请的内存空间在native heap中,而java申请的内存空间则在dalvik heap中。这是因为Android系统对dalvik的vm heapsize作了硬性限制,当java进程申请的java空间超过阈值时,就会抛出OOM异常(这个阈值可以是48M、24M、16M等,视机型而定),可以通过adb shell getprop | grep dalvik.vm.heapgrowthlimit查看此值。

也就是说,程序发生OMM并不表示RAM不足,而是因为程序申请的java heap对象超过了dalvik vm heapgrowthlimit。也就是说,在RAM充足的情况下,也可能发生OOM

2.3、查看单个应用的内存占有量的情况,通常用如下手段查看

3、  使用android 提供的procrank获取即可

通过指令:adb shell procrank | grep packagename

通过adb shell procrank指令可以获取VSS,RSS,USS,PSS

VSS – Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

RSS – Resident Set Size 实际使用物理内存(包含共享库占用的内存)

PSS – Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

USS – Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

其中USS只能通过procrank获取,首先网上下载libpagemap.so, procmem, procrank,然后push到android手机中。有的root机自带这几个文件,不需要额外下载。

4、  通过ADT插件DDMS查看用内存MAT进行分析

利用DDMS的Heap可以很方便的查看app的内存占用情况,在app运行时,打开DDMS选项,在Devices下,可以看到正在运行的App,选择要查看内存的App,点击该条目,并选择Update Heap,如下图:

在Heap职工,选择Cause GC,可以查看应用的占用情况,具体如下图:

内存条性能测试软件,性能测试之内存篇测试方法整理相关推荐

  1. Ambarella S6L55M 性能测试之内存篇

    使用自带的 单元测试工具 unit_test\linux\benchmark\bandwidth 进行测试, 自带的readme如下: Bandwidth performs sequential an ...

  2. Android性能:内存篇之内存回收

    Android性能:内存篇之内存回收 在学会内存性能优化之前我们得先了解内存如何回收,在<Android性能:内存篇之虚拟机概论>我们已经了解了虚拟机的概念及JVM结构体系与内存空间,在& ...

  3. 【性能测试】性能测试之性能测试指标详解(详细)

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

  4. 【性能测试】性能测试之性能测试指标详解(性能指标、CPU、内存、负载、磁盘)

    目    录 一  系统性能测试指标 1.1 响应时间 1.2 并发 1.3 点击量/点击率 1.4 吞吐量/吞吐率 1.5 TPS/QPS 1.6 PV/UV 二  Linux服务器性能指标 2.1 ...

  5. unity 性能优化--内存篇(上)

    资源内存占用 在一个较为复杂的大中型项目中,资源的内存占用往往占据了总体内存的70%以上.因此,资源使用是否恰当直接决定了项目的内存占用情况.一般来说,一款游戏项目的资源主要可分为如下几种:纹理(Te ...

  6. iphone5性能测试软件,性能翻倍 苹果iPhone5s跑分对比iPhone5

    苹果iPhone5s发布,又一次引领了智能手机性能的提升.苹果A7处理器首次在智能手机当中采用的64位ARMv8架构,并首次内置PowerVR的6系列GPU"PowerVR G6430&qu ...

  7. windows客户端性能测试之内存泄露检查工具umdh.exe

    Umdh 是 Debugging Tools for Windows 中的工具,在windbg的安装目录内,UMDH主要通过分析比较进程的Heap Stack trace信息来发现内存泄露的. Umd ...

  8. android 工厂测试内存,Android性能测试之内存

    内存的方式和cpu类似,我们通过多次采集,得出内存值,看内存是否异常. 如何获取内存值 1.adb shell dumpsys meminfo 2.adb shell dumpsys meminfo ...

  9. macmini性能测试软件,性能强劲!Intel Mac mini上手测试

    Macenstein.com网站最近刚刚拿到最新的Intel Mac mini duo,并立即交出了新系统的测试成绩单.他们在mini上运行了Xbench和Cinebench两款测试软件,并对比了其他 ...

  10. android内存占用分析,Android App性能评测分析-内存篇

    1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查问题. 1 ...

最新文章

  1. docker mysql容器启动不_Mysql容器启动失败-解决方案
  2. day58-activiti 02-历史数据查询
  3. #ifndef #define #endif ”防止头文件被重复包 .
  4. LAMP攻略: LAMP环境搭建,Linux下Apache,MySQL,PHP安装与配置
  5. ubuntu下安装、卸载软件
  6. jquery 动画总结(主要指效果函数)
  7. UNIX网络编程——常用服务器模型总结
  8. 生成.pkl文件,读取.pkl文件的内容
  9. 智能合约安全陷阱和开发建议
  10. ImageView实现圆形头像效果
  11. SEM和TEM的相同点和不同点
  12. SpyNote V5.0图形化工具远程控制Android手机教程(图文教程+演示视频)
  13. 【异常】JSON.toJSON()导致的内存溢出
  14. unity 角色鉴赏 spine动画鉴赏人物
  15. 如果今天是我生命中的最后一天
  16. 一文读懂链上身份(DID):赛道及项目一览
  17. 核酸检测管理系统,核酸预约系统,核酸检测预约系统毕业设计作品
  18. 内存泄露分析之MAT工具使用
  19. 计算机启动时运行ccleaner,CCleaner中设置表详解
  20. Arduino A4950 驱动直流电机

热门文章

  1. 【SOJ 385】旅馆
  2. python后端开发的书籍_资深程序员Python学习进阶书籍推荐_后端开发
  3. 滑雪计时系统|滑雪计时计分|2019国际冬季运动(北京)博览会
  4. Balancer均衡器时段设置
  5. 企业微信自建应用开发
  6. Elasticsearch Nested类型深入详解
  7. IC之无毛刺时钟切换
  8. 实验吧——天网管理系统
  9. 无线路由器显示无服务器,路由器没信号怎么办?三招教你解决问题!
  10. 荣耀畅玩5a android5.0,华为荣耀畅玩5A有几个版本?华为荣耀5A各版本区别对比介绍...