文档章节

Android上的CPU信息监测

每天多一点
 每天多一点
发布于 2014/05/06 15:15
字数 2072
阅读 700
收藏 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手机的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
Android基础性能数据获取(api或/proc/读取)

主要资料参考 Android系统源码在线查看网址 Linux平台Cpu使用率的计算 腾讯开源移动端性能测试APP:GT 3.1 内存篇 内存:表示当前进程内存的使用情况,内存占用过高可能会引起内存抖动,或O...

某杰
05/07
0
0
Android开发:调试工具集

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

carlos
2014/10/13
0
1
Android各种Manager-郭通

一、PowerManager 主要是用来控制电源状态,设置屏幕状态,和电池待机状态 PowerManager pm = ((PowerManager)getSystemService(POWER_SERVICE)); 这里我需要保持屏幕长期唤醒,不被锁屏,所...

蓝神100
06/28
0
0
Android Studio 3.2新功能特性

android studio3.2预览版本已经发布了,下面这些功能在最新的版本已经提供,但可能尚未在测试版本中发布渠道中提供。 什么是新的助理 Android Studio 3.2有一个新的Assistant面板,可以通知您...

我就是马云飞
06/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

72.告警系统邮件引擎 运行告警系统

20.23/20.24/20.25 告警系统邮件引擎 20.26 运行告警系统 20.23/20.24/20.25 告警系统邮件引擎 邮件首先要有一个mail.py,以下。 因为我们之前zabbix的时候做过,就可以直接拷贝过来 mail.s...

王鑫linux
34分钟前
0
0
09-利用思维导图梳理JavaSE-

09-利用思维导图梳理JavaSE-Java IO流 主要内容 1.Java IO概述 1.1.定义 1.2.输入流 - InputStream 1.3.输出流 - OutputStream 1.4.IO流的分类 1.5.字符流和字节流 2.InputStream类 2.1.File...

飞鱼说编程
39分钟前
1
0
Spring Cloud 微服务的那点事

在详细的了解SpringCloud中所使用的各个组件之前,我们先了解下微服务框架的前世今生。 单体架构 在网站开发的前期,项目面临的流量相对较少,单一应用可以实现我们所需要的功能,从而减少开...

我是你大哥
49分钟前
2
0
步步深入MySQL:架构->查询执行流程->SQL解析顺序

一、前言 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了。 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一...

Java干货分享
今天
1
0
gson1.7.1线程并发导致空指针问题

java.lang.NullPointerExceptionat com.google.gson.FieldAttributes.getAnnotationFromArray(FieldAttributes.java:231)at com.google.gson.FieldAttributes.getAnnotation(FieldAttribut......

东风125
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部