Android性能测试②-三种必备内存&CPU测试的方法

转载地址:https://blog.csdn.net/douyunqian668/article/details/80605310

Android用户也许会经常碰到以下的问题:

1)应用后台开着,手机很快没电了——应用耗电大;

2)首次/非首次启动应用,进入应用特别慢——应用启动慢;

3)应用使用过程中,越来越卡——CPU能力不足/内存泄露;

4)应用页面卡顿——帧率较低、页面卡顿。

因此,对开发的Android应用,必须对其进行性能测试,不然将会直接影响用户体验。

Android应用性能测试通常包括:启动时间、内存、CPU、耗电量、流量、流畅度等。我们将在这个月陆续为大家简单介绍一下每个测试点的常见测试方法及简单的定位思路,仅供参考。本期我们介绍内存&CPU的测试方法。

内存和CPU测试主要是为了检测应用在用户不同使用强度下消耗手机内存和CPU的情况,如果内存消耗过大会造成手机使用时卡顿,闪退等现象,进而影响用户体验,甚至会影响日活数据和用户留存等情况。因此,应用的内存占用大小也是产品体验好坏一个重要指标和测试重点。正常情况下,应用不应占用过多的内存资源,且能够及时释放内存,保证整个应用内的稳定性和流畅性。根据手机的使用应用频度和强度不同,可将应用使用强度分为如下几种状态:

l  空闲状态:指启动应用后,不做任何操作或切换到后台运行的情况称为空闲状态,该情况为应用对内存的消耗是最小的。

l  中强度状态:该情况用户使用应用的强度和时间长短不确定,相对来说使用时长偏长。

 l  高强度状态:该种情况为应用内高频率的使用,用户很少达到,跑monkey时可认为高强度状态,该种情况常用来测试应用内存泄漏的情况测试时,可根据用户的操作习惯模拟应用使用频率和强度等级。

 

使用adb命令

1、 测试方法

手机连接电脑开启 USB调试模式,进入 adbshell

(1)查看 CPU占用率

使用命令top-m 10 -s cpu(-t 显示进程名称,-s 按指定行排序,-n 在退出前刷新几次,-d 刷新间隔,-m 显示最大数量),如下图:

 

                                                   图1

参数含义:

PID:progressidentification,应用程序ID

S: 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。

#THR:程序当前所用的线程数

VSS:VirtualSet Size虚拟耗用内存(包含共享库占用的内存)

RSS: ResidentSet Size实际使用物理内存(包含共享库占用的内存)

UID:UserIdentification,用户身份ID

Name:应用程序名称

在测试过程中,QA需要关注对应包的cpu占用率,反复进行某个操作,cpu占用过高且一直无法释放,此时可能存在风险。如果你想筛选出你自己的应用的话可以用下面命令top -d 3| greppackageName

Android性能测试②-三种必备内存&CPU测试的方法

        图2

(1)查看内存使用情况

dumpsysmeminfo <package_name>或dumpsys meminfo <package_id>

Android性能测试②-三种必备内存&CPU测试的方法
       图3

参数含义:

l   Naitve Heap Size: 从mallinfo usmblks获得,代表最大总共分配空间

l   Native Heap Alloc: 从mallinfo uorblks获得,总共分配空间

l   Native Heap Free: 从mallinfo fordblks获得,代表总共剩余空间

l   Native Heap Size 约等于Native Heap Alloc + Native Heap Free

l   mallinfo是一个C库, mallinfo 函数提供了各种各样的通过C的malloc()函数分配的内存的统计信息。

l   Dalvik Heap Size:从Runtime totalMemory()获得,Dalvik Heap总共的内存大小。

l   Dalvik Heap Alloc: Runtime totalMemory()-freeMemory() ,Dalvik Heap分配的内存大小。

l   Dalvik Heap Free:从Runtime freeMemory()获得,Dalvik Heap剩余的内存大小。

l   Dalvik Heap Size 约等于Dalvik  HeapAlloc + Dalvik  Heap Free

重点关注如下几个字段
(1) Native/Dalvik 的 Heap 信息中的alloc
具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。
(2) Total 的 PSS 信息
这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。

 

AndroidStudio 自带 CPU 和内存检测功能

2.1 测试方法

手机连接电脑,在标1中选择要调试的手机,标注2中选择要检测的应用进程,memory是内存监控,cpu是cpu监控。

Android性能测试②-三种必备内存&CPU测试的方法
图4

测试时,重点关注两点:

1)退出某个页面后,内存是否回落。如果没有及时回落,也不一定就是问题,可能程序还没有自动GC,故一般情况下,需要手动GC,如果手动GC后,仍无法回落,此时可以确定有问题。

2)进行某个操作后,内存增长的过快,也可能存在风险,此时可反复操作进行确认。

2.2总结

AndroidStudio 自带 CPU 和内存检测工具,绘制出变化图,可以直观明了的看出内存和cpu的变化曲线。

 

使用Android自身提供的ActivityManager.MemoryInfo()方法获得

通过该方法获取某应用的内存信息。目前网易的Emmagee工具就是通过该方法实现某应用内存和cpu数据的获取,测试简单方便,安装app以后选中被测应用即可开始测试,界面会展示内存、CPU和流量等数据。完成测试后,可在本地SD卡种保存一份性能测试数据,可以从里面获取内存信息。

Android性能测试②-三种必备内存&CPU测试的方法