赞
踩
在测试Android应用的过程中,内存和cpu值大小是测试的重点之一,本文将列举几种工作中常用的获取方式。
获取内存和cpu信息的最简单方式就是使用adb shell 自带的top命令,在测试过程中,电脑连接设备,使用adb shell top命令,即可得到近乎实时的应用内存使用情况。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及以上设备,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:运行进程所使用的命令。进程名称(命令名/命令行)
无论对Android哪个版本,都可以获取应用的内存PSS( Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存) )信息,命令如下:
adb shell dumpsys meminfo
无论对Android哪个版本,都可以获取应用cpu使用情况
adb shell dumpsys cpuinfo
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。