问题描述
|
我正在制作一个小型Android应用程序,以显示当前的总cpu使用情况,例如Windows Task Manager中的Performance标签。
我使用\“ 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使用率?
解决方法
该问题的可接受答案不正确。输出的第二行是在该分组中启动的线程/进程的数量。上面的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个进程使用的是总CPU的9%。
,该问题的实际答案很简单-可以从android top输出的第一行计算得出
User 5%,system 15%,IRQ 0%
总计=所有百分比的总和= 5 + 15 = 20%
关于第二行的另一个答案是如此错误。第二行实际上给出了计划程序在该特定状态下花费的时间-用户/ sys / idle / iow在top的一个输出与top的下一个输出之间以jiffies
(通常为10ms)显示-在OP的情况下为top -d 1
-每次打印使用情况第二个-每个核心的抖动总数约为100个(假设每个抖动10毫秒)-类似于百分比值。
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
这可能没有任何“ 6”选项,因此“ 9”需要3秒的默认延迟= 300 jiffies。
请参考AOSP顶级源代码,以获取有关如何计算每个值的完整逻辑。
,CPU使用百分比大致等于ѭ10as。在您的代码段中,ѭ11%的百分比为73,这使您的CPU使用率达到27%。
至于每个进程的CPU使用率,这将是最后两行的第二列。
,top命令是linux命令。
在这里看看
谢谢
迪帕克