顶部命令第一次迭代总是返回相同的结果

当运行top -b -n 1时,该命令总是返回相同的CPU值。 考虑连续5次以下的testing:

[user@server ~]$ top -b -n 5 -d.2 | grep "Cpu(s)" Cpu(s): 18.5%us, 10.0%sy, 0.0%ni, 67.0%id, 4.2%wa, 0.0%hi, 0.2%si, 0.1%st Cpu(s): 39.8%us, 27.7%sy, 0.0%ni, 31.3%id, 0.0%wa, 0.0%hi, 1.2%si, 0.0%st Cpu(s): 39.0%us, 35.4%sy, 0.0%ni, 23.2%id, 0.0%wa, 0.0%hi, 1.2%si, 1.2%st Cpu(s): 41.2%us, 34.1%sy, 0.0%ni, 15.3%id, 1.2%wa, 0.0%hi, 2.4%si, 5.9%st Cpu(s): 59.0%us, 30.1%sy, 0.0%ni, 4.8%id, 0.0%wa, 0.0%hi, 3.6%si, 2.4%st [user@server ~]$ top -b -n 5 -d.2 | grep "Cpu(s)" Cpu(s): 18.5%us, 10.0%sy, 0.0%ni, 67.0%id, 4.2%wa, 0.0%hi, 0.2%si, 0.1%st Cpu(s): 18.9%us, 17.8%sy, 0.0%ni, 63.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu(s): 18.8%us, 21.2%sy, 0.0%ni, 55.3%id, 2.4%wa, 0.0%hi, 1.2%si, 1.2%st Cpu(s): 29.4%us, 24.7%sy, 0.0%ni, 45.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu(s): 60.5%us, 24.4%sy, 0.0%ni, 11.6%id, 1.2%wa, 0.0%hi, 1.2%si, 1.2%st [user@server ~]$ top -b -n 5 -d.2 | grep "Cpu(s)" Cpu(s): 18.5%us, 10.0%sy, 0.0%ni, 67.0%id, 4.2%wa, 0.0%hi, 0.2%si, 0.1%st Cpu(s): 43.4%us, 38.6%sy, 0.0%ni, 15.7%id, 0.0%wa, 0.0%hi, 1.2%si, 1.2%st Cpu(s): 55.3%us, 40.0%sy, 0.0%ni, 4.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu(s): 39.5%us, 48.8%sy, 0.0%ni, 5.8%id, 1.2%wa, 0.0%hi, 1.2%si, 3.5%st Cpu(s): 40.7%us, 55.6%sy, 0.0%ni, 2.5%id, 0.0%wa, 0.0%hi, 0.0%si, 1.2%st [user@server ~]$ top -b -n 5 -d.2 | grep "Cpu(s)" Cpu(s): 18.5%us, 10.0%sy, 0.0%ni, 67.0%id, 4.2%wa, 0.0%hi, 0.2%si, 0.1%st Cpu(s): 27.1%us, 10.6%sy, 0.0%ni, 61.2%id, 1.2%wa, 0.0%hi, 0.0%si, 0.0%st Cpu(s): 25.3%us, 5.7%sy, 0.0%ni, 67.8%id, 0.0%wa, 0.0%hi, 0.0%si, 1.1%st Cpu(s): 15.5%us, 16.7%sy, 0.0%ni, 64.3%id, 0.0%wa, 0.0%hi, 0.0%si, 3.6%st Cpu(s): 57.3%us, 11.2%sy, 0.0%ni, 30.3%id, 0.0%wa, 0.0%hi, 0.0%si, 1.1%st [user@server ~]$ top -b -n 5 -d.2 | grep "Cpu(s)" Cpu(s): 18.5%us, 10.0%sy, 0.0%ni, 67.0%id, 4.2%wa, 0.0%hi, 0.2%si, 0.1%st Cpu(s): 44.0%us, 6.0%sy, 0.0%ni, 42.9%id, 0.0%wa, 0.0%hi, 3.6%si, 3.6%st Cpu(s): 45.8%us, 9.6%sy, 0.0%ni, 44.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu(s): 34.5%us, 8.3%sy, 0.0%ni, 57.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu(s): 38.6%us, 14.5%sy, 0.0%ni, 45.8%id, 0.0%wa, 0.0%hi, 0.0%si, 1.2%st 

任何想法可能是这里的问题?

Solutions Collecting From Web of "顶部命令第一次迭代总是返回相同的结果"

CPU利用率数据是以时间间隔的平均值计算的。 对于第一次迭代,该时间间隔是“从系统启动到现在”; 对于后续迭代,时间间隔是“从最后一次迭代到现在”。

如果有人正在寻找一个线获得CPU的价值,然后尝试这一点

top -b -n 5 -d.2 | grep "Cpu" | tail -n1 | awk '{print($2)}' | cut -d'%' -f 1

Top在开始之前不知道处理时间计数是多少,所以它根据各种因素(如加载平均和等待线程)在第一遍中进行猜测。

如果您以交互方式开头并快速检查返回的第一批结果,则可以看到相同的效果。

简单的解决方案: top -b -n 5 -d.2 | grep "Cpu(s)" | tail -n+2 top -b -n 5 -d.2 | grep "Cpu(s)" | tail -n+2

下面是一个例子,用来计算顶层所有进程的总CPU使用率。 我使用-d标志来增加默认的时间间隔以平滑数值。 不使用尾部,因为头文件可能特定于Linux发行版。

 top -b -d 5 -n 2 | awk '$1 == "PID" {block_num++; next} block_num == 2 {sum += $9;} END {print sum}' 

我也遇到了这个问题,并做了一些挖掘。

如果你是“顶级”人物,那么你可以从第七部分中找到以下内容。 。 。

top命令通过查看样本之间的CPU时间值的变化来计算Cpu(s)。 当你第一次运行它时,它没有以前的样本比较,所以这些初始值是启动以来的百分比。 这意味着您至少需要两个循环,或者您必须忽略来自第一个循环的汇总输出。 这对于批处理模式是个问题。 如果您定义CPULOOP = 1环境变量,则有可能的解决方法。 在标准输出之前,顶部命令将运行一个额外的CPU数据隐藏循环。

希望这可以帮助!