Bash脚本:将CPU利用率写入文件(Ubuntu)

时间:2016-04-22 22:59:55

标签: bash ubuntu cpu

我想编写一个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%之间变化),而在同一时期,第二个命令的结果几乎保持不变。有人对此有解释吗?

非常感谢所有评论!

1 个答案:

答案 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我们始终获取最后一个值,即空闲值)