Android App性能之--cpu占用率

获取Android App cpu占用率一般有两种方式,一个是用dumpsys cpuinfo,另一个是top

1、dumpsys cpuinfo命令

Android提供的dumpsys工具可以用于查看系统服务信息与状态,dumpsys cpuinfo可以用来查看安卓系统当前的cpu使用情况。

adb shell dumpsys cpuinfo

Load: 14.13 / 14.13 / 14.13

CPU usage from 70984ms to 10984ms ago:

1.1% 2635/com.android.browser: 0.7% user + 0.3% kernel / faults: 1 minor

0.8% 247/surfaceflinger: 0.2% user + 0.6% kernel

0.4% 796/system_server: 0.3% user + 0.1% kernel

0.1% 915/com.android.systemui: 0% user + 0% kernel / faults: 30 minor

0.1% 156/bat_thread_kthr: 0% user + 0.1% kernel

0% 1660/com.tencent.mobileqq:MSF: 0% user + 0% kernel / faults: 37 minor

0% 3683/com.tencent.mobileqq: 0% user + 0% kernel

0% 3766/com.android.keyguard: 0% user + 0% kernel / faults: 47 minor

0% 59/hps_main: 0% user + 0% kernel

0% 931/tx_thread: 0% user + 0% kernel

0% 6080/com.oppo.market: 0% user + 0% kernel / faults: 12 minor

0% 233/healthd: 0% user + 0% kernel

0% 285/adbd: 0% user + 0% kernel

0% 744/gsm0710muxd: 0% user + 0% kernel

0% 5270/kworker/u17:2: 0% user + 0% kernel

0% 6556/com.nearme.gamecenter:dcs: 0% user + 0% kernel / faults: 1 minor

0% 3/ksoftirqd/0: 0% user + 0% kernel

0% 53/cfinteractive: 0% user + 0% kernel

0% 89/btif_rxd: 0% user + 0% kernel

0% 131/display_esd_che: 0% user + 0% kernel

0% 284/em_svr: 0% user + 0% kernel

0% 298/mtk_wmtd: 0% user + 0% kernel

0% 738/kworker/u17:3: 0% user + 0% kernel

0% 1073/com.android.phone: 0% user + 0% kernel / faults: 17 minor

0% 1146/com.oppo.launcher: 0% user + 0% kernel / faults: 14 minor

0% 6132/com.oppo.market:dcs: 0% user + 0% kernel / faults: 3 minor

0% 6527/com.nearme.gamecenter: 0% user + 0% kernel / faults: 3 minor

0% 6911/kworker/0:2: 0% user + 0% kernel

+0% 6947/kworker/0:0: 0% user + 0% kernel

3% TOTAL: 1.6% user + 1.3% kernel

1)参数解释

第一行显示的是cpuload (负载平均值)信息:Load: 14.13 / 14.13 / 14.13

这三个数字表示逐渐变长的时间段(平均一分钟,五分钟和十五分钟)的平均值,而较低的数字则更好。数字越大表示问题或机器过载。

user 和 kernel分别代表用户和系统内核分别占用的cpu比率

user(用户态): 只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程序获取

kernel(内核态): CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序

2)为什么要有用户态和内核态

由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 -- 用户态 和 内核态

3)应用cpu占用率

如果想要具体查看某个App的cpu占用率,可以用命令

adb shell "dumpsys cpuinfo | grep packagename"

以Android自带浏览器为例,命令为

adb shell "dumpsys cpuinfo | grep com.android.browser"

 

2、top

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

参数含义:

PID:progressidentification,应用程序ID

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

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

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

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

UID:UserIdentification,用户身份ID

Name:应用程序名称

如果你想筛选出你自己的应用的话可以用下面命令
top -d 3| greppackageName

 

3、总结

个人理解:cpuinfo因为是取一段时间的平均值,而total也是取这段时间的平均值,而非所有进程的平均值之和,所以两者存在一定差异

1、dumpsys cpuinfo可以用于日常App自动化性能监控、巡检

2、top命令可以查看瞬时的cpu占用率,在性能的故障分析调优时可能会更有用

 

 

 

uploading.4e448015.gif转存失败重新上传取消uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif正在上传…重新上传取消

 

posted @ 2020-04-26 15:03  null先森  阅读(1611)  评论(0编辑  收藏  举报