文档章节

Android上的CPU信息监测

每天多一点
 每天多一点
发布于 2014/05/06 15:15
字数 2072
阅读 709
收藏 0

在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上的实现

© 著作权归作者所有

共有 人打赏支持
每天多一点
粉丝 10
博文 11
码字总数 8562
作品 0
大连
程序员
私信 提问
Android Studio 3.2 都有哪些更新?这些关键点不要错过

作者:Jamal Eason, Android 产品经理 点击这里即刻下载 Android Studio 3.2。 Android Studio 3.2 是应用开发者切入最新的 Android 9 Pie 发布版和构建新的 Android App Bundle 的最佳途径。...

Android_开发者
10/16
0
0
StatCounter 8 月 OS 市场份额:Android 降,iOS 升

网站通讯流量监测机构 StatCounter 公布了 8 月份的市场份额数据,这一次咱们关注一下跨平台操作系统的情况。 数据显示,Android 以 41.66% 的占比位列第一,而紧随其后的毫无疑问是 Window...

h4cd
09/30
0
0
Android 自动化测试工具初探

Android 自动化测试工具初探 前言 这段几乎都编写代码,没有新的心得体会.唯一由感想的是在测试上.由于策划的变动,接口的完善等因素,总在不停的修改功能,修改代码.由于项目中的代码都经过了好...

ZHL
2012/08/29
0
0
Android开发:调试工具集

查看当前堆栈 1) 功能:在程序中加入代码,使可以在logcat中看到打印出的当前函数调用关系 2) 方法: new Exception(“print trace”).printStackTrace(); 2. MethodTracing 1) 功能:用于热...

carlos
2014/10/13
0
1
如何通过命令行查看Android手机的Activtiy堆栈信息和手机分辨率

查看 activity 栈的状态: adb shell dumpsys activity Android has an interesting command called dumpsys to dump some system information. Even described on adb manual I think that ......

beijing_zbs
2015/02/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

不学无数——SpringBoot入门IV

SpringBoot 1.Profiles Spring Profiles能够在不同的环境中使不同的应用配置生效。@Component和@Configuration两个注解都能够通过@Profiles来标记。下面是例子: @Configuration@Profile("b...

不学无数的程序员
34分钟前
2
0
nginx长连接出现504的解决办法

在http 中添加如下 fastcgi_connect_timeout 300s; fastcgi_send_timeout 300s; fastcgi_read_timeout 300s;...

hansonwong
34分钟前
1
0
记一次 Spring Boot多数据源 循环引用问题

如题,升级了一下mybatis版本后出现循环引用的问题。 具体异常如下 ***************************APPLICATION FAILED TO START***************************Description:The depen...

HeyS1
35分钟前
1
0
MongoDB Could not find host matching read preference { mode: \"primary\" } for set repl_shard1

最近在测试 MongoDB 4.0 分片集群 ,搭建好所有节点后,往mongos添加分片的时候,一直报错 Could not find host matching read preference { mode: \"primary\" } for set ,如下 mongos> sh...

xxj123gogo
39分钟前
1
0
linux安装java1.8

# tar -zxvf jdk-8u144-linux-x64.tar.gz vi /etc/profile export JAVA_HOME="/usr/local/java/jdk1.8.0_144" export CATALINA_HOME="/usr/local/tomcat/apache-tomcat-9.0.0.M22" export PA......

八戒八戒八戒
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部