内存和CPU测试主要是为了检测应用在用户不同使用强度下消耗手机内存和CPU的情况,如果内存消耗过大会造成手机使用时卡顿,运行不流畅,闪退、打开应用速度慢等现象,从而影响用户体验,让用户在使用中消耗较多的时间以及恼火的等待。因此,应用的内存占用大小也是产品体验好坏一个重要指标和测试重点。正常情况下,应用不应占用过多的内存资源,且能够及时释放内存,保证整个应用内的稳定性和流畅性。根据手机的使用应用频度和强度不同,可将应用使用强度分为如下几种状态:
空闲状态:指启动应用后,应用中无相关的数据信息,不做任何操作或切换到后台运行的情况称为空闲状态,该情况为应用对内存的消耗是最小的。启动速度应为最快的。
中强度状态:应用存在用户数据,并在设备后天挂载一定数量的进程,使用较长时间的应用。
高强度状态:该种情况为应用内高频率的使用,用户很少达到,跑monkey时可认为高强度状态,该种情况常用来测试应用内存泄漏和系统稳定性的情况测试时,可根据用户的操作习惯模拟应用使用频率和强度等级。
下面介绍一些测试方法。
1、adb 命令--查看 CPU占用率
使用命令adb shell top -m 10 -s cpu(-s 按指定行排序,-m 显示最大数量)如下所示:
其中参数含义如下:
PID:progressidentification,应用程序ID
S: 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
#THR:程序当前所用的线程数
VSS:VirtualSet Size虚拟耗用内存(包含共享库占用的内存)
RSS: ResidentSet Size实际使用物理内存(包含共享库占用的内存)
UID:UserIdentification,用户身份ID
Name:应用程序名称
2、查看内存使用情况
使用如下命令:adb shell dumpsys meminfo <package_name>或dumpsys meminfo <package_id>
参数含义:
Naitve Heap Size: 从mallinfo usmblks获得,代表最大总共分配空间
Native Heap Alloc: 从mallinfo uorblks获得,总共分配空间
Native Heap Free: 从mallinfo fordblks获得,代表总共剩余空间
Native Heap Size 约等于Native Heap Alloc + Native Heap Free
mallinfo是一个C库, mallinfo 函数提供了各种各样的通过C的malloc()函数分配的内存的统计信息。
Dalvik Heap Size:从Runtime totalMemory()获得,Dalvik Heap总共的内存大小。
Dalvik Heap Alloc: Runtime totalMemory()-freeMemory() ,Dalvik Heap分配的内存大小。
Dalvik Heap Free:从Runtime freeMemory()获得,Dalvik Heap剩余的内存大小。
Dalvik Heap Size 约等于Dalvik HeapAlloc + Dalvik Heap Free
重点关注如下几个字段:
(1) Native/Dalvik 的 Heap 信息中的alloc
具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。
(2) Total 的 PSS 信息
这个值就是你的应用真正占据的内存大小,通过这个信息,可以初步判别手机中哪些程序占内存比较大。