Android上的CPU信息监测

在Android上,监测CPU的方法很多,这里简单介绍集中通用方法:

1. 通过cpuinfo句柄

cpuinfo中存储了cpu本身的型号等相关信息。

adb shell cat /proc/cpuinfo

可以得到类似如下的输出:

Processor    : ARMv7 Processor rev 2 (v7l)
processor    : 0
BogoMIPS    : 13.53

processor    : 1
BogoMIPS    : 13.53

processor    : 2
BogoMIPS    : 13.53

processor    : 3
BogoMIPS    : 13.53

Features    : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 
CPU implementer    : 0x51
CPU architecture: 7
CPU variant    : 0x0
CPU part    : 0x06f
CPU revision    : 2

Hardware    : nubia
Revision    : 0000
Serial        : 0000000000000000

得出的信息比较少,使用场景比较有限。


2. 通过stat句柄

stat中存储了cpu从启动到当前时刻的活动信息。  

adb shell cat /proc/stat

可以得到类似如下的输出:

cpu  1383888 41022 908946 30750872 120099 43 20689 0 0 0
cpu0 912462 17560 720855 6254191 81004 32 11639 0 0 0
cpu1 369166 16660 139238 7848860 30609 7 5741 0 0 0
cpu2 72811 4827 33513 8289506 5910 3 2346 0 0 0
cpu3 29449 1975 15340 8358315 2576 1 963 0 0 0
intr 52776099 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24044003 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 424908 0 0 1353351 14382 0 199598 0 0 0 0 0 0 0 0 0 0 27858 3520 0 0 0 0 0 0 0 0 0 0 0 0 0 278 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 1900608 0 0 0 0 711430 0 64924 0 19 0 0 0 0 0 1722817 0 0 0 0 0 0 0 672943 0 247498 0 0 0 2962703 0 0 0 0 0 0 0 0 0 0 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 0 0 0 0 0 0 0 0 0 0 0 1516444 0 541 0 4256 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 328 0 991344 0 211108 0 0 0 2587628 2016820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 235927 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 238 0 0 129 3 8753 0 1 0 0 0 0 0 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 172510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 29 0 37 4 0 0 0 0 0 0 0 0 47 0 0 0 0 0 0 0 0 0 0 0 943 0 0 0 0 0 0 0 0 0 0 205 205 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170618 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 287 0 0 0 0 0 0 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 0 0 0 0 0 79 4 57 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 238 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 143065482
btime 1399128388
processes 273975
procs_running 2
procs_blocked 0
softirq 16061372 19203 6189762 40428 1543227 19073 19073 990072 1311290 24921 5904323

主要有用的是首行,记录了各项指标在cpu中的运行时间。因为stat中记录的信息是从cpu ON开始的,所以为了更准确的记录cpu的使用情况,需要多次采样进行计算。

具体例子如下:

mesure 1: cpu 8000 2000 1000 9000
mesure 2: cpu 9500 2500 1500 9500

在 measure 1 和 mesure 2的cpu占有率是怎样的呢?

9500 - 8000 = 1500 in user
2500 - 2000 = 500 in system
1500 - 1000 = 500 in nice
9500 - 9000 = 500 in idle

1500 + 500 + 500 + 500 = 3000 in total

因此,cpu的占有率为:
1500/3000 = 0.5 in user
500/3000 = 0.16 in system
500/3000 = 0.16 in nice
500/3000 = 0.16 in idle

具体算法可以参考这里。在Android上的实现可以看这里。


3. dumpsys cpuinfo

如果需要查询每一个进程所占用的cpu,dumpsys就是一个比较好方法了。

adb shell dumpsys cpuinfo

可以得到如下的输出:

Load: 4.26 / 4.34 / 9.73
CPU usage from 10160ms to 4170ms ago:
  2.8% 842/system_server: 1.3% user + 1.5% kernel / faults: 50 minor
  2.1% 21434/com.xunlei.cloud: 1.1% user + 1% kernel
  1.3% 1320/android.process.media: 0.8% user + 0.5% kernel
  1% 1576/mpdecision: 0% user + 1% kernel
  0.6% 1355/com.lbe.security.miui:service: 0.6% user + 0% kernel / faults: 9 minor
  0.6% 23621/com.tencent.androidqqmail:Push: 0.5% user + 0.1% kernel / faults: 22 minor
  0.3% 290/zygote: 0% user + 0.3% kernel / faults: 68 minor
  0.3% 1151/com.android.systemui: 0.1% user + 0.1% kernel / faults: 1 minor
  0.3% 22530/kworker/0:1: 0% user + 0.3% kernel
  0.1% 139/mmcqd/0: 0% user + 0.1% kernel
  0% 280/servicemanager: 0% user + 0% kernel
  0.1% 289/surfaceflinger: 0.1% user + 0% kernel
  0% 1751/lbesec.loader: 0% user + 0% kernel / faults: 1 minor
  0% 2148/com.miui.networkassistant: 0% user + 0% kernel / faults: 79 minor
  0.1% 6088/com.tencent.mm: 0% user + 0.1% kernel
  0.1% 9089/kworker/u:18: 0% user + 0.1% kernel
  0.1% 19414/com.android.mms: 0% user + 0.1% kernel
  0.1% 23426/kworker/0:2: 0% user + 0.1% kernel
  0% 29281/RX_Thread: 0% user + 0% kernel
  0.1% 30361/com.tencent.qqmusic: 0.1% user + 0% kernel
 +0% 24421/com.alipay.pushservice: 0% user + 0% kernel
16% TOTAL: 9.2% user + 7.1% kernel + 0.5% iowait

针对每一个进程都会显示出来在内核空间和用户空间的cpu占用率。


4. 使用top命令

adb shell top

可以得到类似如下的输出:

User 3%, System 6%, IOW 0%, IRQ 0%
User 10 + Nice 0 + Sys 20 + Idle 276 + IOW 0 + IRQ 0 + SIRQ 0 = 306

  PID PR CPU% S  #THR     VSS     RSS PCY UID      Name
30103  0  10% R     1   1532K    780K     shell    top
26053  0   2% S    25 849976K  26156K  bg u0_a66   com.xunlei.cloud
 1320  2   1% S    37 874656K  37748K  fg u0_a13   android.process.media
 1576  0   0% S     6   7620K    824K     root     /system/bin/mpdecision
23621  0   0% S    20 873480K  28028K  bg u0_a65   com.tencent.androidqqmail:Push
30361  0   0% S    48 907172K  71524K  bg u0_a68   com.tencent.qqmusic
29279  0   0% S     1      0K      0K     root     MC_Thread
 9089  0   0% S     1      0K      0K     root     kworker/u:18
  842  0   0% S   101 993364K  79128K  fg system   system_server
 1151  0   0% S    35 911524K  63992K  fg system   com.android.systemui
...

这里有一个android上的实现

你可能感兴趣的:(Android上的CPU信息监测)