我想编写一个bash脚本,将当前的CPU利用率写入文件“logfile”。我使用的是英特尔®酷睿™i7-4500U CPU @ 1.80GHz×4和Ubuntu 15.10。
我已经在本论坛中看到过类似的问题,但并非所有问题都得到了100%的回答。根据我的研究,我提出了两种可能的方法来实现我的目标。第一个是
mpstat | grep "all" | awk '{ print $3 + $5; }' >> logfile
(添加用户CPU和系统CPU)和我的第二个候选人是
mpstat | grep "all" | awk '{ print 100 - $12; }' >> logfile
(100%空闲CPU)。如果我对CPU总利用率感兴趣,那么这两个中的哪一个对我来说是正确的(因此应该包括以某种形式计算为CPU的所有组件)。
另一个问题:通过阅读其他主题我学到了什么,我想我的第二个候选人
mpstat | grep "all" | awk '{ print 100 - $12; }' >> logfile
应该非常准确。但是,当我打开“系统监视器”并监视“CPU历史记录”时,我发现CPU利用率显着不同。另一件事是系统监视器中的值非常动态(CPU在4%和18%之间变化),而在同一时期,第二个命令的结果几乎保持不变。有人对此有解释吗?
非常感谢所有评论!
答案 0 :(得分:2)
这是因为mpstat
的第一行显示了自系统启动以来计算的平均值(这将更加“稳定” - 随着时间的推移会越来越少地变化。)
来自mpstat
手册页的引用:
interval参数指定以秒为单位的时间量 每个报告之间。值为0(或根本没有参数) 表示要报告处理器统计信息的时间 自系统启动(启动)。
如果您添加了一个interval参数,您将开始获取实时数字,这些数字应该更接近您的系统监视器输出(尝试执行mpstat 1
与普通mpstat
)。
因此,这个Bash系列应该可以解决这个问题:
mpstat 1 1 | grep "all" | awk '{ print 100 - $NF; exit; }' >> logfile
并且,没有grep
(保存额外的进程spawn):
mpstat 1 1 | awk '/all/{ print 100 - $NF; exit; }' >> logfile
(将$12
更改为$NF
,以获取第一行有时间并将参数移位的情况;使用$NF
我们始终获取最后一个值,即空闲值)