如何读取 Stock CPU Usage 数据

Posted

技术标签:

【中文标题】如何读取 Stock CPU Usage 数据【英文标题】:How to read the Stock CPU Usage data 【发布时间】:2012-06-05 11:18:12 【问题描述】:

在冰淇淋三明治上,开发人员选项中的一个选项是“显示 CPU 使用情况”,它会在屏幕上添加一个叠加层(请参见下面的屏幕截图)。

我的问题是,我如何读取数据?我猜包名是当前活动的进程,但是后面的红绿条是什么意思呢? 包裹顶部的3个数字是什么?

【问题讨论】:

我们有类似的内存吗? 我的 3 个“平均负载”约为 9.0。绿色和红色条几乎不可见,在图形密集型游戏中达到约 5% 的屏幕宽度,因此“平均负载”达到约 10.0。我的手机是四核的,电池可以使用很长时间。我认为这里的答案是不完整的。 @Campiador 这大约晚了 1 年,但对于 RAM,您可以运行 c:\> adb shell vmstat 来检查有关内存的信息。 CD 到你的 android-sdk-windows\platform-tools\ 用于 adb。 【参考方案1】:

正如其他答案所指出的,在 UNIX 系统上,这些数字代表 1/5/15 分钟内的 CPU 负载平均值。但在 Linux(以及随之而来的 Android)上,它代表的是不同的东西。

在可追溯到 1993 年的内核补丁 (a great in-depth article on the subject) 之后,在 Linux 中,负载平均数不再严格表示 CPU 负载:因为计算不仅考虑了 CPU 绑定进程,但也适用于处于不间断等待状态的进程——最初的目标是以这种方式考虑 I/O 绑定进程,以表示更多的“系统负载”而不仅仅是 CPU 负载。问题是自 1993 年以来,不间断状态的使用在 Linux 内核中有所增长,它不再通常代表 I/O 绑定进程。一些 Linux 开发人员使用不间断等待作为一种简单的等待来避免在其实现中容纳信号,从而进一步加剧了这个问题。结果,在 Linux(和 Android)中,我们可以看到不客观地代表真实负载的倾斜的高负载平均数字。有 Android 用户报告称,不合理的高负载平均值与低 CPU 利用率形成鲜明对比。例如,我的旧 Android 手机(具有 2 个 CPU 内核)通常显示平均负载约为 12,即使系统和 CPU 处于空闲状态也是如此。因此,Linux (Android) 中的平均负载数并不是一个可靠的性能指标。

【讨论】:

【参考方案2】:

更多关于“平均负载” 显示超过 1 分钟、5 分钟和 15 分钟的 CPU 负载

Linux、Mac 和其他类 Unix 系统显示“平均负载”数字。这些数字告诉您系统的 CPU、磁盘和其他资源的繁忙程度。起初它们并不自解释,但很容易熟悉它们。

WIKI: example, one can interpret a load average of "1.73 0.60 7.98" on a single-CPU system as:

during the last minute, the system was overloaded by 73% on average (1.73 runnable processes, so that 0.73 processes had to wait for a turn for a single CPU system on average).
during the last 5 minutes, the CPU was idling 40% of the time on average.
during the last 15 minutes, the system was overloaded 698% on average (7.98 runnable processes, so that 6.98 processes had to wait for a turn for a single CPU system on average) if dual core mean: 798% - 200% = 598%. 

您可能有一个具有多个 CPU 或多核 CPU 的系统。在这样的系统上,平均负载数字的工作方式略有不同。例如,如果您在单 CPU 系统上的平均负载为 2,这意味着您的系统过载了 100% — 在整个时间段内,一个进程正在使用 CPU,而另一个进程正在等待。在具有两个 CPU 的系统上,这将是完全使用——两个不同的进程一直在使用两个不同的 CPU。在具有四个 CPU 的系统上,这将是一半的使用率——两个进程正在使用两个 CPU,而两个 CPU 处于空闲状态。

要了解负载平均数,您需要知道系统有多少 CPU。平均负载为 6.03 表示具有单个 CPU 的系统严重超载,但在具有 8 个 CPU 的计算机上会很好。

更多信息:Link

【讨论】:

【参考方案3】:

来自High Performance Android Apps书(第157页):

我们看到的相当于adb shell dumpsys cpuinfo 命令 数字在 1 分钟、5 分钟和 15 分钟(左起)中显示 CPU load 颜色显示 CPU 在用户空间(绿色)、内核(红色)和 IO 中断(蓝色)中花费的时间

【讨论】:

【参考方案4】:

到目前为止,这是我能找到的最有用的信息来源。 显然,这些数字不会以百分比表示平均负载: http://forum.xda-developers.com/showthread.php?t=1495763

【讨论】:

平均负载永远不会以 % 为单位【参考方案5】:

这应该是 Unix 平均负载。 Wikipedia 有一篇很好的文章。

这些数字显示了 CPU 在不同时间间隔内的平均负载。从左到右:最后一分钟/最后五分钟/最后十五分钟

【讨论】:

来自开发者网站:显示 CPU 使用情况 在屏幕顶部显示 CPU 计量器,显示 CPU 的使用量。顶部的红色条显示总体 CPU 使用率,下方的绿色条显示合成屏幕所花费的 CPU 时间。注意:一旦打开此功能,您将无法在不重新启动模拟器的情况下将其关闭。 developer.android.com/tools/debugging/debugging-devtools.html "绿色是用户空间时间,红色是内核时间,蓝色是io中断时间。" - 黛安哈克伯恩groups.google.com/forum/?fromgroups=#!topic/android-platform/… 每个核心有一根柱子吗?我只看到 2 条,但我有一个四核设备。这是否意味着我没有使用所有核心? @Ken:条形图是整个 CPU 的平均负载,而不是核心。顶栏显示操作系统和所有程序的 CPU 使用率,其他栏显示特定程序的 CPU 使用率。所以不用担心,Android 使用所有内核。 我有点困惑。 Dianne Hackborn 说:绿色 = 用户空间,红色 = 内核,蓝色 = 中断,但在开发人员网站上它说:红色 = 总体 CPU 使用率,绿色 = 合成屏幕。听起来不完全一样,对吧?

以上是关于如何读取 Stock CPU Usage 数据的主要内容,如果未能解决你的问题,请参考以下文章

Java如何读取CPU的数据信息

python学习之模块:xlsxwriter

OleDB 数据未从正确的行读取

Spring Boot 执行器“system.cpu.usage”与“process.cpu.usage”

CPU和内存之间的通信是怎么实现的?CPU对内存的访问时如何实现的? 大学考题,务必精确啊,谢谢

spark sql怎么去获取hive 表一定日期范围内的数据