2016-04-22 92 views
1

我想编写一个bash脚本,将当前CPU利用率写入文件“logfile”。我使用英特尔®酷睿™i7-4500U CPU @ 1.80GHz×4和Ubuntu 15.10。Bash脚本:将CPU利用率写入文件(Ubuntu)

我已经在这个论坛上看到过类似的问题,但并不是所有的问题都被回答为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

您是否看到系统监视器的利用率显着高于此脚本**在同一时间**返回的数量?或者可能是额外的CPU使用率仅仅是系统监视器使用更多的CPU来生成GUI并绘制使用图? –

+0

是的,我打开了系统监视器,在执行此操作时,我几次将第二个命令打入终端。我刚刚观察到,这些值也可以(显着)较低。另一件事是系统监视器中的值非常动态(CPU在4%和18%之间变化),而在同一时期,第二个命令的结果几乎保持不变 - 我在帖子中编辑了这个值。 – BJPrim

+0

我建议安装[GNU会计实用程序](https://apps.ubuntu.com/cat/applications/precise/acct/)。 –

回答

2

发生这种情况是因为mpstat的第一行显示了系统启动后的平均值(这会更加稳定)。

报价从mpstat手册页:

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

如果添加的时间间隔参数,你会开始找回生活的数字,这应该更符合你的系统监视器输出(请尝试执行mpstat 1与平原mpstat)。

因此,这种猛砸行应该做的伎俩:

mpstat 1 1 | grep "all" | awk '{ print 100 - $NF; exit; }' >> logfile 

,并做才不至于grep(节省额外的过程产卵):

mpstat 1 1 | awk '/all/{ print 100 - $NF; exit; }' >> logfile 

(改变$12$NF为当第一行有时间并且移动参数时;用$NF我们始终得到最后的值,这是空闲值)

+0

谢谢你,这么好,简单和完美的解决方案!现在,来自mpstat的CPU利用率确实与系统监视器完全相同(就我所知,只需通过我的眼睛监控就可以知道)。非常感谢! – BJPrim

+0

@BJPrim还不完美,它仍然有一个'grep'可以删除:) –

+0

噢,好的,谢谢你的进一步改进:) – BJPrim