【问题标题】:Bash script: write CPU utilization to file (Ubuntu)Bash 脚本:将 CPU 利用率写入文件(Ubuntu)
【发布时间】:2018-05-07 15:44:17
【问题描述】:

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

非常感谢所有 cmets!

【问题讨论】:

  • 您是否发现系统监视器的利用率显着高于此脚本同时返回的数量?或者可能是额外的 CPU 使用率仅仅是系统监视器使用更多 CPU 来生成 GUI 并绘制使用图?
  • 是的,我打开了系统监视器,在执行此操作时,我将第二个命令输入终端几次。我刚刚观察到这些值也可能(显着)更低。另一件事是系统监视器中的值是非常动态的(CPU 在 4% 和 18% 之间变化),而在同一时期,第二个命令的结果几乎保持不变——我在帖子中对此进行了编辑。
  • 我建议安装GNU accounting utilities
  • 这个问题可能更适合 unix.stackexchange.com 或 askubuntu.com。这与脚本无关,而是mpstat 实用程序的工作原理。
  • @BJPrim 添加了 Bash 脚本来回答应该满足您的需求(获得更“实时”的价值)。

标签: bash ubuntu cpu


【解决方案1】:

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

引自mpstat手册页:

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

如果您添加一个间隔参数,您将开始获取实时数字,这应该更接近您的系统监视器输出(尝试执行mpstat 1 与普通的mpstat)。

因此,这条 Bash 行应该可以解决问题:

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 我们始终得到最后一个值,即空闲值)

【讨论】:

  • 哇,谢谢,这么好的、简单和完美的解决方案!现在,来自 mpstat 的 CPU 利用率确实与系统监视器相同(据我所知,仅通过我的眼睛进行监控)。非常感谢!
  • @BJPrim 还不完美,它仍然有一个可以删除的grep :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 2011-02-26
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多