什么是CPU?
CPU就像人体的大脑,是负责读取和处理事务的核心部件,由运算器、控制器、寄存器以及实现它们之间联系的数据、控制及状态的总线构成。
Android CPU的三大状态及使用率的计算
用户态:即CPU处于用户态执行的时间
系统态:即CPU处于系统内核执行的时间
空闲态:即CPU处于空闲系统进程执行的时间
CPU使用率
使用率 = (用户态+系统态)/用户态+系统态+空闲态
Android中来源于Linux,所以也存在全局变量Jiffies(理解为时间,单位为1/HZ)
故Android CPU使用率 = (用户态Jiffies + 系统态Jiffies)/ 总Jiffies
使用率的获取方式
Linux中获取CPU使用率的方法为Top命令,Android只需加上adb shell即可
adb shell top
字段解释:
上面四个主要为总体情况,如下:
Tasks:系统现在一共有176个进程,其中处于运行中的有1个,173个在休眠,stopped状态0个,僵尸态(zombie)1个
僵尸态与stop态很接近,不同点在于stopped是进程退出,释放所有资源,而僵尸态资源没有得到完全释放
Mem:物理内存总量为4041008k;使用中内存总量683736k;空闲为3357272k;缓存内存量3412k
1024k=1Kb
Swap交换分区:交换区总量(0k);使用的交换区总量(0k);空闲(0k);缓冲交换区总量(323860k)
400%CPU:即CPU总量——四核
user:用户空间占用CPU百分比
sys:内核空间占用CPU的百分比
idle:空闲CPU的百分比
故CPU使用率为:(sys+user)/cpu
iow:IO等待占用CPU的百分比
irp:硬中断占用CPU的百分比
硬中断是由外部事件引起的,具有随机性和突发性
sirp:软中断占用CPU的百分比
软中断是软件实现的中断,常见为编译错误,是通讯进程之间用来模拟硬中断的一种方式
下面部分主要为进程详情,如下:
PID:进程id
User:进程所有者
PR:进程优先级
NI:nice值,负值表示高优先级,正值为低优先级,普通进程的NI值通常等于PR-20
VIRT:进程使用的虚拟内存总量,单位kb。VIRT=RES+SWAP
RES:进程使用的,未被换出的物理内存大小
SHR:共享内存大小
S:进程状态
D:不可中断的睡眠状态 R:运行 S:睡眠 T:停止 Z:僵尸态
%CPU:上次更新到现在CPU时间的占用百分比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的CPU时间总计
ARGS:进程名称
对于单个APP,我们可以使用
:
adb shell dumpsys cpuinfo 包名
adb shell
(最好先进入adb shell,否则会提示grep不是内部命令)
top | grep 包名
谢谢观看~