文档章节

Android上的CPU信息监测

每天多一点
 每天多一点
发布于 2014/05/06 15:15
字数 2072
阅读 688
收藏 0
点赞 0
评论 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
博文 10
码字总数 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开发:调试工具集

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

carlos
2014/10/13
0
1
Android基础性能数据获取(api或/proc/读取)

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

某杰
05/07
0
0
Android性能分析工具简介

在Android项目开发工程中,功能开发只是其中的一部分,更多的时候是优化,优化除了个人的良好习惯,往往还需要借助第三方工具。本文罗列Android优化过程中的一些常用工具借助这些工具,可以很...

code_xzh
05/02
0
0
Android Studio 3.2新功能特性

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

我就是马云飞
06/14
0
0
android debug工具集

1.TraceView 1)功能:用于热点分析和性能优化,分析每个函数占用的CPU时间,调用次数,函数调用关系等  2)方法:   a)在程序代码中加入追踪开关   import android.os.Debug;   …… ...

垂盆草
2012/08/18
0
0
Android各种Manager-郭通

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

蓝神100
06/28
0
0
Android 自动化测试工具初探

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

ZHL
2012/08/29
0
0
【Android入门】-【AndroidManifest.xml】-【中英对照】

The AndroidManifest.xml File 【安卓应用清单】 【该文高度总结,初学需要多次返回阅读体味】 【来源:http://developer.android.com/guide/topics/manifest/manifest-intro.html】 Every ...

zhmsong
2012/02/07
0
1
Android工具TraceView

一、TraceView 简介 TraceView 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot。TraceView 本身只是一个数据分析工具,而数据的采集则需要使用 ...

恰同学少年
2015/08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nginx upstream 负载均衡

Nginx upstream 负载均衡 了了情空 关注 2016.05.31 16:16* 字数 612 阅读 537评论 1喜欢 0 上周五同事跟我提一个需求,大概描述是酱紫:“我们现在终端都在访问同一台服务器,如果流量过大造...

linjin200
3分钟前
0
0
Dubbo 源码解读——自定义 Classloader 之 ExtensionLoader

众所周知,Dubbo 是阿里巴巴公司自主研发开源的一个高性能的服务框架(现已捐献给 Apache 基金会组织),应用之间可以通过 RPC 的方式来互相调用并返回结果。主要基于 Java 语言开发,它提供...

Ryan-瑞恩
11分钟前
0
0
Sonar Maven/IDEA集成(未完待续)

前言:在上一篇(SonarQube安装步骤)的基础上,我们来集成maven/IDEA 1.首先是集成maven(maven的安装配置就不多说了) 找到maven安装目录下-conf文件夹-setting.xml文件 然后添加以下配置信...

张艺兴女朋友
11分钟前
0
0
JVM的内存区域划分

JVM的内存区域划分   学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的...

yzbty23
11分钟前
0
0
mysql 日期查询

MYSQL查询今天、昨天、7天前、30天、本月数据今天:SELECT * FROM 表名 WHERE TO_DAYS( 时间字段名) = TO_DAYS(NOW());昨天:SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) ...

evil_01
18分钟前
0
0
RuntimeError - [Xcodeproj] Unknown object version

在创建新工程,使用cocoaPods下载第三方库时,报如下的错: 报这个错,是因为xcode工程版本Deployment Target 和工程project format不匹配造成的,因此需要调整这两个配置一致,处理这个问题...

奋斗的青春年华
31分钟前
0
0
java中modbus协议连接

modbus在java中的使用,首先maven的pom中引入modbus4j包 <dependency><groupId>com.infiniteautomation</groupId> <artifactId>modbus4j</artifactId> <version>3.0.3......

江湖鱼大虾
34分钟前
0
0
Java单例的常见形式

Java单例的常见形式 本文目的:总结Java中的单例模式 本文定位:学习笔记 学习过程记录,加深理解,便于回顾。也希望能给学习的同学一些灵感 一、非延迟加载单例类 public class Singleton {...

lichuangnk
35分钟前
1
0
微信小程序接口报错47001的解决方法

使用微信小程序码的生成接口,发现死活都报47001错误。 有人提到是urlencode的问题,不能使用urlencode。 修改了代码,可以了。代码贴出来: import urllib.requestimport urllib.parse...

乐_然
38分钟前
0
0
6、Git安装

1、下载地址: https://git-scm.com/ 2、下载完成后安装,安装路径自己选择,其他的选项参照下图: 其他的一步一步往下即可,最后Finish完成安装; 3、配置github的ssh密钥: (1)打开Git Bas...

丑陋的皮囊
42分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部