当前位置: 首页 > 面试题库 >

计算Android中进程的CPU使用率

柯栋
2023-03-14
问题内容

我正在尝试按以下方式计算Android中进程的CPU使用率,但是由于产生的输出,我不确定它是否正确。

要将吉菲转换为秒:吉菲/赫兹

第一步: 使用/proc/uptime文件的第一个参数获取正常运行时间。

第二步: 从中获取每秒的时钟滴答数/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

第三步: 从中获取过程(utime(14) +stime(15))参数花费的总时间/proc/[pid]/stat

第四步:/proc/[pid]/stat Linux
2.6之后的时钟滴答声中除以sysconf(_SC_CLK_TCK)表示的值,获取进程的starttime(22)。

第五步: 获取自进程启动(uptime - (starttime / hertz)以来的总运行时间(因为正常运行时间以秒为单位,而启动时间以时钟滴答为单位)。

第六步: 获取CPU使用率百分比((totaltime / hertz) / elapsedTime) * 100

计算后的输出类似于5.702244483458246E-6,大约等于〜0.000005702244483

编辑

输出量

步骤1:226.06 1211.19

步骤2:1000000

步骤3:9347(example.com)S 3573 3573 0 0 -1 1077952832 8971 0 1 0 38 32 0 0 20 0
25 0 13137 983830528 14330 4294967295 1 1 0 0 0 0 4612 0 38136 4294967295 0 0
17 5 0 0 0 0 0 0 0 0 0 0 0 0 0

参考:如何从/ proc / pid /
stat获取应用程序的CPU总使用率?


问题答案:

我怀疑您将其中的值/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq用作您的hertz值。这是不正确的,因为该文件为您提供了CPU硬件时钟频率,但是您必须使用Linux内核时钟频率作为您的hertz值。

CPU硬件时钟和Linux内核时钟不同。Android运行的Linux内核具有自己的计时器(时钟),并以一定的频率更新。此计时器更新的频率是内核赫兹(HZ)值。

由于历史原因,Linux
proc和sys文件中列出的时钟滴答值HZ通过Linux内核USER_HZ常数从内核频率缩放到公共频率。USER_HZ我们必须hertz在计算中使用此常量作为值。

数据采集

  • 正常运行时间226.06
  • utime38时钟滴答
  • stime32时钟滴答
  • 开始时间13137时钟滴答
  • Hertz100(Linux内核USER_HZ常数)
    • 这是基于未修改的Android系统的假设。

计算方式

total_time = utime + stime = 38 + 32 = 70

seconds = uptime - (starttime / Hertz) = 226.06 - (13137 / 100) = 94.69

cpu_usage = 100 * ((total_time / Hertz) / seconds) = 100 * ((70 / 100) / 94.69) = 0.7392...

您的进程的总CPU使用率约为 0.739%
。如果这看起来很小,请记住您的进程与系统上的所有其他进程共享CPU:大多数普通进程在其整个生命周期中都处于空闲状态,因此任何一个进程通常平均总CPU使用率较低。



 类似资料:
  • 问题内容: 我想以编程方式[在C中]为Linux中给定进程ID计算CPU使用率%。 如何获得给定进程的实时CPU使用率%? 为了进一步说明: 我应该能够确定所提供的processid或进程的CPU使用率。 该进程不必是子进程。 我想要“ C”语言的解决方案。 问题答案: 您需要从中解析出数据。这些是前几个字段(来自内核源代码): 您可能在和/或之后。您还需要从中读取行,如下所示: 这将告诉您已在各

  • 问题内容: 我想知道一个固定时间段内一个进程和所有子进程的CPU使用率。 更具体地说,这是我的用例: 有一个过程在等待用户执行程序的请求。为了执行程序,该进程调用子进程(一次最多5个),并且每个子进程执行这些已提交程序中的1个(假设用户一次提交了15个程序)。因此,如果用户提交15个程序,则将运行3批,每批5个子进程。子进程在完成程序执行后立即被杀死。 我想知道在执行这15个程序期间,父进程及其所

  • 问题内容: 我能否查看当前python应用程序正在使用的处理器使用量(占最大值的百分比)? 场景:只要不消耗超过X%的CPU能力,我的主机就可以允许我运行我的应用程序,因此我希望它“关注自身”并放慢速度。那么我如何知道该应用程序使用了多少CPU? 目标平台是* nix,但是我也想在Win主机上进行。 问题答案: 从(2.5)手册中: 次() 返回一个五元组的浮点数,以秒为单位指示累计(处理器或其他

  • 问题内容: 关于如何使用/ proc / stat中的统计信息获取CPU利用率的文章和参考文献很多。但是,它们中的大多数仅使用7个以上的CPU统计信息中的四个(用户,nice,系统和空闲),而忽略了Linux2.6中存在的剩余jiffie CPU计数(iowait,irq,softirq)。 我的问题是:iowait / irq / softirq编号是否也计入前四个编号之一(用户/ nice /

  • 本文向大家介绍计算Linux上进程中的线程数,包括了计算Linux上进程中的线程数的使用技巧和注意事项,需要的朋友参考一下 Linux进程可以可视化为程序的运行实例,其中Linux中的每个线程不过是进程的执行流。您知道如何在Linux环境中查看每个进程的线程数吗?有几种计数线程数的方法。本文讨论如何读取有关Linux上进程的信息以及如何计算每个进程的线程数。 阅读过程信息 要读取过程信息,请使用“

  • 我已经用RxJava成功地完成了一个小型Java程序。代码为: 使用此代码,一切正常。现在我正在尝试将此代码传递给Android: 在finished()方法中,我正在更新GUI(finishedListener是当前活动正在实现的接口)。 我在使用map(I)的线路上遇到错误- 内置。gradle(用于应用程序)我正在使用: 我如何解决这个问题?