10

我正在制作一个小型 Android 应用程序来显示当前的总 CPU 使用率,例如 Windows 任务管理器中的选项卡性能。我使用“top -m 1 -n 1 -d 1”来获取 CPU 使用率,但我不太了解“top”的结果。

结果如下:

User 5%, system 15%, IOW 0%, IRQ 0%
User 5 + Nice 0 + Sys 14 + Idle 73 + IOW 0 + IRQ 0 + SIRQ 0 = 92
PID     CPU%  S   #THR    VSS    RSS    UID     Name
213     11%   R    1      900K   340K   app_16   top

CPU使用率= ??? 如何计算总 CPU 使用率?

4

4 回答 4

10

这个问题的公认答案是不正确的。输出的第二行是在该分组中启动的线程/进程的数量。在上面你的 CPU 使用率是 20%。其中 5% 来自用户应用,15% 来自系统应用。您有 73 个空闲线程、14 个系统线程和 5 个用户线程(根据第二行)。

例如,这是我的 Droid 的当前顶部快照。

User 6%, System 5%, IOW 0%, IRQ 0%
User 21 + Nice 0 + Sys 16 + Idle 270 + IOW 0 + IRQ 3 + SIRQ 0 = 310

  PID CPU% S  #THR     VSS     RSS PCY UID      Name
30994   4% S    19 134912K  24140K  bg app_24   edu.vu.isis.ammo.spotreport
 1021   3% S    57 217400K  58504K  fg system   system_server
20911   2% R     1    880K    400K  fg shell    top
 1053   0% S     1      0K      0K  fg root     tiwlan_wq
  995   0% S     2   1272K    128K  fg compass  /system/bin/akmd2

根据接受的答案,我将有 310% 的 CPU 使用率,而这实际上只是线程数。我很确定我实际上只使用了 11% 的 CPU,其中前 3 个进程使用了​​总数的 9%。

于 2011-08-11T17:31:04.347 回答
6

这个问题的实际答案是直截了当的 - 可以从 android top 输出的第一行计算出来

User 5%, system 15%, IOW 0%, IRQ 0%

总计 = 所有百分比的总和 = 5+15 = 20%

关于第二行的另一个答案是错误的。第二行实际上给出了调度程序在该特定状态下花费的时间——用户/系统/空闲/iow在jiffiestop的一个输出和top的下一个输出之间(通常为10毫秒)——在OP的情况下top -d 1——每秒打印一次使用情况——总数每个核心的 jiffies 约为 100(假设每个 jiffy 为 10ms)——这类似于百分比值。

User 5 + Nice 0 + Sys 14 + Idle 73 + IOW 0 + IRQ 0 + SIRQ 0 = 92

-d然而,如果更高或如果有多个核心,则值会更高

User 21 + Nice 0 + Sys 16 + Idle 270 + IOW 0 + IRQ 3 + SIRQ 0 = 310

这可能没有任何-d选项,因此top默认延迟为 3 秒 = 300 jiffies。

请参阅 AOSP顶级源代码以获取如何计算每个值的完整逻辑。

于 2013-03-19T10:31:55.910 回答
-5

CPU 使用百分比以(100-idle_percentage)或多或少的形式给出。在您的代码段中,Idle百分比为 73,这使您的 CPU 使用率为 27%。

至于每个进程的 CPU 使用率,这将是最后两行的第二列。

于 2011-05-26T05:48:33.837 回答
-5

top 命令是一个 linux 命令。看看这里

谢谢迪帕克

于 2011-05-26T05:50:34.057 回答