Android性能测试——获取内存和cpu使用情况

Android性能测试——获取内存和cpu使用情况

在测试Android应用的过程中,内存和cpu值大小是测试的重点之一,本文将列举几种工作中常用的获取方式。

一、使用top获取内存和cpu信息

获取内存和cpu信息的最简单方式就是使用adb shell 自带的top命令,在测试过程中,电脑连接设备,使用adb shell top命令,即可得到近乎实时的应用内存使用情况。Android8.0+以上的设备或许有些不同,但内容

Android8.0以下的设备

Android8.0以下的设备,top后可以跟一些参数来限制打印的结果
top 后可跟的参数如下

Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [-t ] [ -h ]
-m num  Maximum number of processes to display. 最多显示多少个进程
-n num  Updates to show before exiting.  刷新次数 
-d num  Seconds to wait between updates. 刷新间隔时间(默认5秒)
-s col  Column to sort by (cpu,vss,rss,thr). 按哪列排序 
-t      Show threads instead of processes. 显示线程信息而不是进程
-h      Display this help screen.  显示帮助文档

打印的top结果如下

User 8%, System 4%, IOW 0%, IRQ 0%
User 153 + Nice 1 + Sys 91 + Idle 1600 + IOW 0 + IRQ 0 + SIRQ 1 = 1846

  PID PR CPU% S  #THR     VSS     RSS PCY UID      Name
 2103  2   7% S    75 1807528K 187764K  fg u0_a16   com.android.systemui
  438  0   2% S    15 145984K   8428K  fg system   /system/bin/surfaceflinger
 1333  0   1% S   176 2404956K 137780K  fg system   system_server
11112  0   0% S     1      0K      0K  fg root     kworker/u16:5
12102  6   0% R     1   5200K   1776K  fg shell    top
...

对于top打印的结果,第二行各个数据解释:

User  处于用户态的运行时间,不包含优先值为负进程 
Nice  优先值为负的进程所占用的CPU时间 
Sys   处于核心态的运行时间 
Idle  除IO等待时间以外的其它等待时间 
IOW   IO等待时间 
IRQ   硬中断时间 
SIRQ  软中断时间

第三行各个数据解释

PID   进程id
PR    优先级
CPU%  当前瞬时CPU占用率
S     进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
THR  程序当前所用的线程数
VSS   Virtual Set Size  虚拟耗用内存(包含共享库占用的内存),是单个进程全部可访问的地址空间 
RSS   Resident Set Size 实际使用物理内存(包含共享库占用的内存),是单个进程实际占用的内存大小,对於单个共享库, 尽管无论多少个进程使用,实际该共享库只会被装入内存一次。 
PCY   调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
UID   进程所有者的用户id
Name  进程的名称

Android8.0以上的设备

Android8.0及以上设备,top 后可跟的参数如下

Android8.0及以上设备的结果类似linux的结果,打印的top结果如下

 [?25l [0m [H [J [s [999C [999B [6n [uTasks: 596 total,   2 running, 554 sleeping,   0 stopped,   0 zombie
Mem:   5862776k total,  5755700k used,   107076k free,    10264k buffers
Swap:  2293756k total,        0k used,  2293756k free,  2825024k cached
800%cpu  21%user 145%nice  76%sys 534%idle  10%iow   0%irq  14%sirq   0%host
 [7m  PID USER         PR  NI VIRT  RES  SHR S[%CPU] %MEM     TIME+ ARGS             [0m
 7048 u0_a40104    30  10 1.3G 181M 106M R  124   3.1   0:17.86 dex2oat --zip-f+
 7083 shell        20   0  12M 2.4M 1.6M R 34.4   0.0   0:00.05 top
 4363 u0_a96       20   0 4.3G  81M  51M S 20.6   1.4   0:05.18 com.huawei.appm+
  351 root         -2   0    0    0    0 S 20.6   0.0   0:02.00 [dhd_rxf]
...

对于top打印的结果,第二行各个数据解释:

Mem:   5862776k total,  5755700k used,   107076k free,    10264k buffers
表示
Mem total used free buffers: 总内存,已使用多少,空闲多少,缓冲区还有多少

第三行各个数据解释:

Swap:  2293756k total,        0k used,  2293756k free,  2825024k cached
表示
Swap total used free cached:交换区全部、已使用、空闲和缓冲交换空间

第四行各cpu运行状态:

800%cpu  21%user 145%nice  76%sys 534%idle  10%iow   0%irq  14%sirq   0%host
表示
cpu  全总的cpu能力,正常可以理解为有n核,总的就是n*100%
user: 运行(未调整优先级的) 用户进程的CPU占用
niced:运行已调整优先级的用户进程的CPU占用
sys: 运行内核进程的CPU占用
idle:空闲的cpu比率
iow	IO wait: 用于等待IO完成的CPU比率
...

第五行是每个应用的具体信息,说明如下

PID USER         PR  NI VIRT  RES  SHR S[%CPU] %MEM     TIME+ ARGS  
表示
PID:进程ID,进程的唯一标识符
USER:进程所有者的实际用户名
PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:virtual memory usage 虚拟内存,进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:常驻内存,驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb
SHR:shared memory 共享内存
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。%CPU显示的是进程占用一个核的百分比,而不是整个cpu(N核)的百分比,有时候可能大于100,那是因为该进程启用了多线程占用了多个核心,所以有时候我们看该值得时候会超过100%,但不会超过总核数*100
%MEM:进程使用的可用物理内存百分比
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒
ARGS:运行进程所使用的命令。进程名称(命令名/命令行)

二、使用cpuinfo和meminfo获取内存和cpu信息

无论对Android哪个版本,都可以获取应用的内存PSS( Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存) )信息,命令如下:

adb shell dumpsys meminfo

无论对Android哪个版本,都可以获取应用cpu使用情况

adb shell dumpsys cpuinfo
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章