<转载>adb shell 监控手机cpu使用率

转载

最近在做Android monitor ,利用adb shell 在pc端监测手机,从网上看的资料总结下,备忘。

1.      adb shell dumpsys cpuinfo 得到每个进程使用cpu的详细信息

2.      adb shell top –n 1 | grep proc 获取指定进程的cpu信息

3.      cat  /proc/cpuinfo 获取cpu 硬件信息

4.      cat /proc/stat

目前查到的有以上四种获取cpu信息的方式,对于1,3未做详细研究,后续补充

对于2由于top命令执行时间太久,大概3到4秒,执行结果:


   
   
  1. User 29%, System 4%, IOW 0%, IRQ 0%
  2. User 359 + Nice 1 + Sys 52 + Idle 787 + IOW 5 + IRQ 8 + SIRQ 2 = 1214
  3. PID PR CPU% S #THR VSS RSS PCY UID Name
  4. 19269 1 25% S 121 3323236K 206268K fg u0_a98 com.antutu.ABenchMark
  5. 517 3 2% S 82 104372K 1148K fg root /system/vendor/bin/thermal-en gine
  6. 1255 2 1% S 152 2388920K 143140K fg system system_server
  7. 374 1 1% S 1 0K 0K fg root msm_thermal:fre

第一行数据(cpu占用率):


   
   
  1. User 用户进程
  2. System 系统进程
  3. IOW IO等待时间
  4. IRQ 硬中断时间

第二行数据(cpu使用情况,单位据说是jiffies):


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

第三行数据:


   
   
  1. PID 进程id
  2. PR 优先级
  3. CPU% 当前瞬时CPU占用率
  4. S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
  5. #THR 程序当前所用的线程数
  6. VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
  7. RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
  8. PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
  9. UID 进程所有者的用户id
  10. Name 进程的名称


对于4,最终选择的是这种方式,执行快,而且android monitor 的源码中也是用这种方式计算的,以及查看的其他工具,靠谱。


   
   
  1. $ adb shell cat /proc/stat
  2. cpu 8616133 258931 8249921 30853032 144979 755992 509627 0 0 0
  3. cpu0 1624419 61721 2732353 26158542 135605 494463 322680 0 0 0
  4. cpu1 1652481 59830 2358955 2229236 7529 155560 96846 0 0 0
  5. cpu2 2676653 73144 1663307 1306790 876 58651 52434 0 0 0
  6. cpu3 2662580 64236 1495306 1158464 969 47318 37667 0 0 0
  7. intr 423574039 0 0 0 41675528 0 21889144 729961 5 4 5 8096 0 0 0 0 314 473 0 1891 516482 0 0 11171628 0 0 0 0 127752 39799 8755299 299379 0 2 0 0 0 0 9939721 0 0 0 0 0 67091 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 471664 708335 7571004 16602123 0 0 0 0 35 4522234 0 291 82 0 0 0 0 0 0 0 11028 1 0 0 0 0 0 0 0 0 109 1 3 12 0 0 0 8 0 0 0 0 68 0 68 0 0 153 0 0 0 62 0 0 0 0 0 0 0 1026 0 413 0 0 0 0 0 43 0 0 0 0 0 4477092 0 0 0 0 0 0 0 1550 0 0 143756 7 7 7 0 0 0 0 0 0 0 15517 3949201 0 333 1 0 1 22 0 8 0 5318 8 31708 14 0 14 5544 383 2155 712722 183889 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246235 0 0 0 0 12601 94475 0 324 0 5 0 69 0 0 0 0 0 0 0 0 0 115 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7938 490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1885 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3729 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 155646 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18152006 0 105 799 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1086 0 0 0 0 0 0 0 0 0 0
  8. ctxt 862498687
  9. btime 1479122422
  10. processes 789948
  11. procs_running 4
  12. procs_blocked 0
  13. softirq 193635390 305292 39873286 732253 2713236 305292 305292 30544250 30361992 86707 88407790
以上为4核手机的执行情况

cpu  8616133 258931 8249921 30853032 144979 755992 509627 0 0 0
   
   

   
   
  1. 红色字体数字表示的含义:
  2. - user 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
  3. - nice 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
  4. - system 从系统启动开始累计到当前时刻,处于核心态的运行时间
  5. - idle 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间
  6. - iowait 从系统启动开始累计到当前时刻,IO等待时间
  7. - irq 从系统启动开始累计到当前时刻,硬中断时间
  8. - softirq 从系统启动开始累计到当前时刻,软中断时间
后面三个0的字段含义:
   
   

   
   

       
       
  1. - steal: involuntary wait
  2. - guest: running a normal guest
  3. - guest_nice: running a niced guest
  4. cpu利用率的计算:
  5. 取很短相邻时间内的两次以上数据
  6. cpu_total=user+nice+system+idle+iowait+irq+soft(据说后面为0的三可能会不为0,但是没遇到过,遇到再补充)
  7. cpu_rate=((cpu_total2-cpu_total1)-(idle2-idle1))/((cpu_total2-cpu_total1))
  8. 备注:以上是参考中文各个网站的资料
  9. stackoverflow上,有另一种计算方式,相似但是不完全一致,计算cpu_total时,没有加iowait,但加了steal
  10. http://stackoverflow.com/questions/23367857/accurate-calculation-of-cpu-usage-given-in-percentage-in-linux
  11. 评论中的参考资料,写的有理有据,觉得比上一种计算方式更可靠,但只有how没有why





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值