博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android系统-获取 CPU 运行总时长
阅读量:4147 次
发布时间:2019-05-25

本文共 3855 字,大约阅读时间需要 12 分钟。

一、adb shell “cat /proc/stat”

/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

// 该文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。不同内核版本中该文件的格式可能不大一致Z91:/proc # cat statcat stat【第一行】cpu  10986698 461191 6973833 18392057 14380 0 13792 0 0 0cpu0 2979270 114716 1953131 16232623 13661 0 3698 0 0 0cpu1 2942761 116427 1876644 702278 228 0 3423 0 0 0cpu2 2629212 114251 1639567 717985 250 0 3449 0 0 0cpu3 2435454 115796 1504490 739170 241 0 3221 0 0 0intr 497972353 0 0 114727036 0 0 51390375 11248 0 1 0 110907 0 0 63628 0 0 0 0 0 0 67 0 0 0 0 673409 0 0 709 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7731 0 0 0 0 0 0 0 0 0 0 00 40 0 0 0 2 0 226026 0 0 0 0 0 0 74813 288 0 0 2208919 0 0 0 0 0 675250 4252472 27956 0 0 0 18 0 0 0 11740 3456 11394777 10510299 0 0 0 0 3310034 0 2662785 0 490866 1124030 4792262 0 4309958 0 0 0 0 0 0 4162101 4309750 57256 0 681 18289610 0 75835 0 20541 0 0 0 0 0 10 133443 0 0 0 1579819 0ctxt 718173363btime 1515467835processes 488766procs_running 3procs_blocked 0softirq 195036376 95295 78945733 51458 840637 35071 35071 80176 50194210 0 64758725============================================================上述中的第一行可以进行 CPU 运行总时长【第一行】cpu  10986698 461191 6973833 18392057 14380 0 13792 0 0 0

二、参数解释

【第一行】cpu 10986698 461191 6973833 18392057 14380 0 13792 0 0 0

1. user (10986698)
从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
2. nice (461191)
从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
3. system (6973833)
从系统启动开始累计到当前时刻,处于核心态的运行时间
4. idle (18392057)
从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间iowait (12256) 从系统启动开始累计到当前时刻,IO等待时间
5. irq (14380)
从系统启动开始累计到当前时刻,硬中断时间
6. softirq (0)
从系统启动开始累计到当前时刻,软中断时间
7. guest(13792)
which is the time spent running a virtual CPU for guest operating systems under the control of the Linux kernel
8. 总的cpu时间
totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen + guest

三、代码实现

package com.fadisu.cpurun.util;import android.os.Process;import android.util.Log;/** * ReadCpuProcFile analysis */public class ReadCpuProcFile {
private static final String TAG = ReadCpuProcFile.class.getSimpleName(); // ReadCpuProcFile probe private static final int[] SYSTEM_CPU_FORMAT = new int[]{ Process.PROC_SPACE_TERM | Process.PROC_COMBINE, Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 1: user time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 2: nice time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 3: sys time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 4: idle time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 5: iowait time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 6: irq time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG // 7: softirq time }; private static long mTotalCpuTime ; private static long mUserStart; private static long mSystemStart; private static long mIdleStart; private static long mIrqStart; public static void getTotalCpuTime() { long[] sysCpu = new long[7]; if (Process.readProcFile("/proc/stat", SYSTEM_CPU_FORMAT, null, sysCpu, null)) { mUserStart = sysCpu[0] + sysCpu[1]; mSystemStart = sysCpu[2]; mIdleStart = sysCpu[3]; mIrqStart = sysCpu[4] + sysCpu[5] + sysCpu[6]; mTotalCpuTime = mUserStart + mSystemStart + mIdleStart + mIdleStart + mIrqStart; Log.d(TAG, "TotalCpuTime = " + mTotalCpuTime); } }}

转载地址:http://aocti.baihongyu.com/

你可能感兴趣的文章
python循环语句与C语言的区别
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
laravel 修改api返回默认的异常处理
查看>>
laravel事务
查看>>
【JavaScript 教程】浏览器—History 对象
查看>>
这才是学习Vite2的正确姿势!
查看>>
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
25个构建Web项目的HTML建议,你需要了解一下!
查看>>