Android获取CPU的使用率

Android获取CPU的使用率

  • 1、参考博客
  • 2、使用读取/proc/stat方案
    • 2.1 读取/proc/stat权限
    • 2.2 CPU使用率获取代码

1、参考博客

android系统之获取CPU的使用率
安卓性能测试之cpu占用率统计方法总结
CPU使用率指标内核源码分析
Android获取CPU,内存,磁盘使用率

2、使用读取/proc/stat方案

计算方法:读取
1、采样两个足够短的时间间隔的CPU快照,分别记作cpu1,cpu2,其中结构均为:
 (user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)
 cpu 28679 2418 11790 74968 2574 1195 567 0 0 0
 cpu 28718 2425 11806 75494 2575 1197 569 0 0 0


2、计算总的CPU时间片totalCpuTime
 a)把第一次的所有cpu使用情况求和,得到cpu1;
 b)把第二次的所有cpu使用情况求和,得到cpu2;
 c)cpu2-cpu1得到这个时间间隔内的所有时间片 ;


3、计算空闲时间idle
 idle对应第四列的数据,用第二次的第四列 - 第一次的第四列即可
 idle=idle2-idle1


4、计算cpu使用率
 pcpu =100* ((cpu2-cpu1) - (idle2-idle1))/(cpu2-cpu1)

下面是去读两次文件: cat /proc/stat

cpu  28679 2418 11790 74968 2574 1195 567 0 0 0
cpu0 3171 230 1516 9720 344 194 115 0 0 0
cpu1 3287 390 1327 9701 341 152 56 0 0 0
cpu2 3664 231 1642 9356 258 162 72 0 0 0
cpu3 3741 299 1560 9124 331 171 72 0 0 0
cpu4 3871 368 1861 8664 335 129 80 0 0 0
cpu5 3659 333 1379 9314 354 129 55 0 0 0
cpu6 3667 265 1267 9484 321 125 56 0 0 0
cpu7 3614 297 1235 9601 287 129 58 0 0 0
intr 2250088 0 906620 49392 0 0 307 32453 0 0 0 0 0 1053917 0 0 0 0 0 3485 1529 1 2371 795 69 0 42596 24619 148 0 0 0 0 2512 0 0 0 0 36120 0 8867 0 0 0 0 68207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9985 0 0 6 3 6 16 896 2153 3015 0 0 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 3899441
btime 1716015046
processes 5873
procs_running 1
procs_blocked 0
softirq 442893 6 43647 33 6478 27946 0 28988 103549 0 232246
cpu  28718 2425 11806 75494 2575 1197 569 0 0 0
cpu0 3173 231 1519 9788 344 194 116 0 0 0
cpu1 3289 390 1329 9772 341 153 56 0 0 0
cpu2 3666 231 1642 9427 258 162 72 0 0 0
cpu3 3745 300 1562 9192 331 171 72 0 0 0
cpu4 3881 369 1863 8724 336 129 80 0 0 0
cpu5 3669 337 1382 9371 355 129 55 0 0 0
cpu6 3671 265 1270 9550 321 126 56 0 0 0
cpu7 3620 298 1236 9665 287 130 58 0 0 0
intr 2254806 0 908585 49516 0 0 312 32464 0 0 0 0 0 1055950 0 0 0 0 0 3485 1540 1 2371 795 69 0 42832 24695 150 0 0 0 0 2512 0 0 0 0 36148 0 8911 0 0 0 0 68307 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10009 0 0 6 3 6 16 920 2153 3050 0 0 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 3905927
btime 1716015046
processes 5884
procs_running 2
procs_blocked 0
softirq 444477 6 43831 33 6487 27956 0 29124 103953 0 233087

2.1 读取/proc/stat权限

非预制应用seLabel标签untrusted_app,这里就有可能出现neverallow

allow system_app proc_stat:file { read getattr open }

日志:avc: denied { getattr } for path=“/proc/stat” dev=“proc” ino=4026532043 scontext=u:r:system_app:s0 tcontext=u:object_r:proc_stat:s0 tclass=file permissive=1

2.2 CPU使用率获取代码

这里读取一行,就是总的CPU使用率计算;这里足够短时间值得关注Thread.sleep(100);

public static float getCpuUsage() {try {RandomAccessFile reader = new RandomAccessFile("/proc/stat", "r");String load = reader.readLine();String[] toks = load.split(" ");long idle1 = Long.parseLong(toks[5]);long cpu1 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4]) + idle1+ Long.parseLong(toks[6]) + Long.parseLong(toks[7]) + Long.parseLong(toks[8]);try {Thread.sleep(100);} catch (Exception e) {e.printStackTrace();}reader.seek(0);load = reader.readLine();reader.close();toks = load.split(" ");long idle2 = Long.parseLong(toks[5]);long cpu2 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4]) + idle2+ Long.parseLong(toks[6]) + Long.parseLong(toks[7]) + Long.parseLong(toks[8]);return (float) (100 * ((cpu2-cpu1) - (idle2-idle1)) / (cpu2-cpu1));} catch (IOException ex) {ex.printStackTrace();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/853496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hexo 搭建个人博客(ubuntu20.04)

1 安装 Nodejs 和 npm 首先登录NodeSource官网: Nodesource Node.js DEB 按照提示安装最新的 Node.js 及其配套版本的 npm。 (1)以 sudo 用户身份运行下面的命令,下载并执行 NodeSource 安装脚本: sudo curl -fsSL…

【牛客面试必刷TOP101】Day32.BM68 矩阵的最小路径和和BM69 把数字翻译成字符串

文章目录 前言一、BM68 矩阵的最小路径和题目描述题目解析二、BM69 把数字翻译成字符串题目描述题目解析总结 前言 一、BM68 矩阵的最小路径和 题目描述 描述: 给定两个字符串str1和str2,输出两个字符串的最长公共子序列。如果最长公共子序列为空&#x…

C++中符号常量与预处理器的行为

C中符号常量与预处理器的行为 以头文件 climits 为例来说明,该头文件定义了符号常量来表示类型的限制。如前所述,INTMAX表示类型int 能够存储的最大值,对于 Windows7系统,为2147483 647。编译器厂商提供了 climits 文件&#xff…

webpack逆向

声明:个人总结记录一下,避免忘记 1、webpack 类型 单文件 直接可以在文件顶部找到加载器 多文件 顶部找不到加载器 如图所示 多文件的这话,全局搜所 69725 找到类似n(69725) ,单点n进去,可以找到加载器 2、调用 通过赋值的方…

企业开源免费和开源的堡垒机选型方案

企业在选择堡垒机时,通常会考虑其安全性、功能性、易用性以及成本。以下是一些免费和开源的堡垒机解决方案,适合希望在保障安全的前提下控制成本的企业: 1. Jumpserver GitHub 地址: https://github.com/jumpserver/jumpserver特点:支持Web…

13.零拷贝

零拷贝:不需要将数据放入到java的缓存中。 更少的用户态与内核态的切换。不利用cpu计算,减少cpu缓存伪共享。零拷贝适合小文件传输。需求 读取服务器的一个文件,通过socket的API发送到客户端。 伪代码 File f = new File("D:/data.txt"); RandomAccessFile fi…

Linux 并发与竞争实验学习

Linux 并发与竞争实验学习 原子操作实验 这里原子操作就是采用原子变量来保护一个程序运行的完整过程,使用atomic 来实现一次只能允许一个应用访问 LED,创建atomic.c文件,其实改动内容就是添加原子变量, 要在设备结构体数据添加…

探索算法的时间复杂度:五种不同时间复杂度的算法介绍

探索算法的时间复杂度:五种不同时间复杂度的算法介绍 在计算机科学中,理解和分析算法的时间复杂度是非常重要的,它可以帮助我们预测算法在处理不同规模数据时的性能表现。本文将介绍五种不同时间复杂度的算法,并解释每个算法如何…

vue2 + element-ui,前端配置化表单封装(2024-06-14)

技术栈是 vue2 element-ui,主要能解决的问题就是 提高代码复用能力、提升开发效率,特别是需要开发多个大型表单系统的,配置化可以极大的提升效率,让你上班摸鱼不再是梦想!为了早点下班,我们接着往下看吧&a…

(Java微服务项目实战)dtpay聚合支付系统对账管理模块系统设计

1 聚合支付系统对账流程 dtpay聚合支付系统对账模块主要涵盖商户侧对账和渠道侧对账、平台侧对账,本文主要分析渠道侧对账。dtpay聚合支付系统通过支付渠道微信、支付宝等产生的支付退款交易数据需要和平台侧产生的数据进行交易数据比对。接下来我们具体分析对账流…

第十五章:基于BERT模型的LoRA训练与resume方法(huggingface)

文章目录 前言一、LoRA训练与Resume方法Demo1、LoraConfig配置文件介绍2、PEFT的LoRA训练的完整Demo3、LoRA训练与LoRA的resume训练1、LoRA训练2、LoRA的resume训练4、PEFT的LoRA训练方法二、权重载入1、参数2、文件路径获取3、config加载更新4、权重文件加载1、不同条件权重载…

一款不写代码的开源爬虫工具!!【送源码】

爬虫,也被称为网络爬虫或网络蜘蛛,是一种自动化的网络机器人,其主要功能是按照一定的规则,自动浏览互联网并从网页中提取信息。 作为一个开发人员,相信大家都尝试过写一些爬虫,合理的利用一些爬虫工具&…

金融行业的等保测评要求

金融行业的等保(网络安全等级保护)测评要求是确保金融机构的信息系统达到一定的安全保护水平,以保护客户信息和金融交易的安全。等保测评在金融行业中的具体要求和流程主要包括以下几个方面: 等保级别 金融行业信息系统依据其重…

深入理解并打败C语言难关之一————指针(4)

前言: 我们在前面的几讲中已经讲了指针的很多内容了,现在我们开始层层递进,要探寻更多的指针喽,不多废话了,直接进入正题,开始今天的指针之旅喽! 目录: 1.字符指针变量 1.1常量字符…

k8s pv使用nfs挂载券需要授权

以下是一个/etc/exports文件的示例,它设置了一个名为/shared的目录,允许192.168.1.0/24网段的所有客户端以读写权限访问该目录: 首选创建/shared目录 mkdir -p /shared ​​​​​​​ /shared 192.168.1.0/24(rw,sync,no_root_squash) …

MEGALODON:突破传统,实现高效无限上下文长度的大规模语言模型预训练和推理

在人工智能领域,尤其是在自然语言处理(NLP)中,大模型(LLMs)的预训练和推理效率一直是研究的热点。最近,一项突破性的研究提出了一种新型神经网络架构——MEGALODON,旨在解决传统Tran…

python怎么连接以太坊,python实现数据上传以太坊

目录 python怎么连接以太坊 python实现数据上传以太坊 python怎么连接以太坊 要在Python中连接以太坊网络,通常你需要使用以太坊的客户端(如Geth或Parity)以及一个Python库来与这些客户端进行交互。最常用的Python库之一是web3.py,它提供了与以太坊网络交互的功能。 以…

PyTorch 索引与切片-Tensor基本操作

以如下 tensor a 为例,展示常用的 indxing, slicing 及其他高阶操作 >>> a torch.rand(4,3,28,28) >>> a.shape torch.Size([4, 3, 28, 28])Indexing: 使用索引获取目标对象,[x,x,x,....] >>> a[0].shape torch.Size([3, 2…

认识与学习JSP

JSP核心技术 什么是JSP JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP/Servlet规范。JSP实际上就是Servlet JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm…

阿里新发布的UniAnimate现高效人像动画生成;在ComfyUI中使用Stable 3模型;音频版的gpt2o;将 PDF 文档转换为音频播客

✨ 1: UniAnimate 阿里新发布的UniAnimate通过统一的视频扩散模型,实现高效人像动画生成,支持长视频生成 UniAnimate 是一种专注于一致性人像动画生成的统一视频扩散模型。该模型通过映射参考图像、姿势指导和噪声视频到一个共同特征空间,实…