我正在尝试使用我的Android手机中的top命令监控CPU使用情况,使用以下命令:
Process p = Runtime.getRuntime().exec("top -m 15 -d 1 -n 1");
我得到的最高命令的输出之一是:
User 2%, System 9%, IOW 0%, IRQ 0%
User 3 + Nice 0 + Sys 10 + Idle 95 + IOW 0 + IRQ 0 + SIRQ 0 = 108
PID PR CPU% S #THR VSS RSS PCY UID Name
743 0 15% R 1 2416K 948K bg u0_a692 top
15351 0 2% S 79 1921396K 114536K bg u0_a59 com.google.android.googlequicksearchbox:search
167 0 1% S 6 9668K 3512K logd /system/bin/logd
496 0 0% S 1 0K 0K root kworker/0:3
20447 0 0% S 1 0K 0K root kworker/u:34
我使用的是具有四核芯片即4个CPU的Nexus 4
这里的总CPU使用率(直观地)是用户+系统= 11%。但是,top
进程本身占用CPU的15%。大部分时间都会发生这种情况。这是我用1s间隔运行top命令绘制的图表。
在大多数情况下,top
命令使用的CPU比用户和系统CPU使用量多。
导致这种行为的原因是什么?
我想计算在空闲睡眠状态下使用多少CPU。所以,我想从用户和系统的CPU使用量中减去top
进程使用的CPU。但是,拥有这些输出无法帮助我确定手机正在使用多少CPU。
另外,进程的CPU%是用户和系统的总和吗?即如果一个进程正在使用10%的CPU,它实际上是使用6%用户和4%系统CPU吗?