我正在尝试按以下方式计算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
秒38
时钟滴答32
时钟滴答13137
时钟滴答100
(Linux内核USER_HZ
常数)
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(用于应用程序)我正在使用: 我如何解决这个问题?