3

这是我的命令:

top -b -n 1 | head -3 | tail -n 1 | awk '{ print $2 }'

我运行一个 bash 脚本来获取这些详细信息(还有平均负载和内存消耗)并将其保存到一个文件中,我用它来可视化 cpu 负载。

但是上面的命令,总是显示相同的值!~6%,无论服务器是处于高负载还是空闲状态。

当我运行时:

top

它在开始时显示相同的值(~6%),刷新后显示实际值(例如 80%)。

如何解决这个问题,或者如何获得可用于可视化的当前 cpu 使用情况?

4

3 回答 3

6

这是因为 top、vmstat、iostat 都在它们的第一次运行中收集自系统上次重新启动以来的数据。

并且连续迭代在您指定的采样周期内运行。因此,在第一次运行 top 时,您会看到%idle时间,因为从重新启动到运行 top 的时间,有那么多 % idle。但在接下来的迭代中,由于它很忙,它不会显示任何%idle.

你可以试试这个:

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

或略短

top -b -n 5 -d.2 | grep "Cpu" |  awk 'NR==3{ print($2)}'

它应该打印如下内容:

48.8%us,
于 2013-07-04T07:53:41.033 回答
1

一种可能的解决方法是在捕获结果之前增加迭代次数。所以尝试类似:

top -b -n 3 | awk 'NR==3{print $2;exit}'

注意:我删除了headand ,tail因为你可以awk单独使用所有内容。

于 2013-07-04T07:57:32.757 回答
0

我不知道它叫做“迭代”,使用这个关键字我找到了解决这个问题的方法:

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

谢谢您的帮助!

于 2013-07-04T07:57:52.943 回答