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

Bash脚本:将CPU利用率写入文件(Ubuntu),bash,ubuntu,cpu,Bash,Ubuntu,Cpu,我想编写一个bash脚本,将当前CPU利用率写入一个文件“logfile”。我正在使用Intel®Core™ i7-4500U CPU@1.80GHz×4和Ubuntu 15.10 我已经在这个论坛上看到过类似的问题,但是并不是所有的问题都得到了100%的回答。通过我的研究,我想出了两种可能的方法来实现我的目标。第一个是 mpstat | grep "all" | awk '{ print $3 + $5; }' >> logfile (添加用户CPU和系统CPU)我的第二

我想编写一个bash脚本,将当前CPU利用率写入一个文件“logfile”。我正在使用Intel®Core™ 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%之间变化),而在同一时期,第二个命令的结果几乎保持不变。有人对此作出解释吗


非常感谢所有评论

之所以会出现这种情况,是因为
mpstat
的第一行显示了自系统启动以来计算的平均值(这将更加“稳定”-随着时间的推移,变化会越来越小)

引用自
mpstat
手册页:

interval参数指定以秒为单位的时间量 在每个报告之间。值为0(或根本没有参数) 指示此时要报告的处理器统计信息 自系统启动(引导)以来

如果添加间隔参数,您将开始获取实时数字,这些数字应与系统监视器输出更为匹配(尝试执行
mpstat 1
与普通
mpstat

因此,此Bash行应该实现以下功能:

mpstat 1 1 | grep "all" | awk '{ print 100 - $NF; exit; }' >> logfile
并且,要在不使用grep的情况下执行此操作(保存额外的进程生成):


(将
$12
更改为
$NF
,用于第一行有时间并转换参数的情况;使用
$NF
我们始终获得最后一个值,即空闲值)

您是否看到系统监视器的利用率明显高于此脚本同时返回的数字?或者,额外的CPU使用量仅仅是系统监视器使用更多的CPU来生成GUI和绘制使用图吗?是的,我打开了系统监视器,在这样做的同时,我在终端中点击了几次第二个命令。我刚刚观察到,这些值也可能(显著)更低。另一件事是,系统监视器中的值是非常动态的(CPU在4%和18%之间变化),而在同一时期,第二个命令的结果几乎保持不变-我在文章中对此进行了编辑。我建议安装。这个问题可能更适合于unix.stackexchange.com或askubuntu.com。这并不是关于脚本编写,而是关于
mpstat
实用程序的工作原理。@BJPrim添加了Bash脚本来回答这个问题,它应该满足您的需要(获得一个更“实时”的值)。哇,谢谢您,这是一个非常好、简单和完美的解决方案!现在,mpstat的CPU利用率确实与System Monitor相同(仅凭我的眼睛就能看出)。非常感谢@BJPrim还不是完美的,它仍然有一个
grep
,可以删除:)
mpstat 1 1 | awk '/all/{ print 100 - $NF; exit; }' >> logfile