【问题标题】:Why does cpu load not change more than a few hundredths?为什么cpu负载变化不超过百分之几?
【发布时间】:2015-11-08 19:53:04
【问题描述】:

我正在运行这个命令

grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'

但它只输出 0.99xxxx% 之类的东西

如果我进行 apt-get 升级或任何过程,我想它会超过 1%。即使运行压力 -c 1 也不会使它发生任何变化。

有没有办法准确记录 CPU 使用率?服务器有 1 个 vCPU。

需要每 5 秒记录一次。

while sleep 5; do "code" >> logfile; done

【问题讨论】:

  • top 呢?您也可以使用普通的旧ps
  • 在使用awk时不熟悉top或ps
  • while (sleep 5); do 的效率远低于while sleep 5; do,而且没有任何好处。
  • 无论如何——你检查过你系统上USER_HZ的值吗?它不一定是 1/100 秒;在桌面系统上,启动它并非闻所未闻..
  • 我也......非常不清楚你的数学背后的推理。 (cputime) * 100 / (cputime + iowait)?您为什么希望它提供有用的结果?

标签: bash cpu cpu-load


【解决方案1】:

如果要记录最高cpu百分比(即查询时刻cpu使用率最高的进程),可以使用:

ps -e -o %cpu | tail -n +2 | sort -r | head -n 1 > cpu-usage.log

命令说明:

  • ps -e -o %cpuo输出格式为您提供e非常进程的进程信息,仅包含 cpu 使用百分比

    李>
  • tail -n +2 从第二行开始过滤前一个输出(从而忽略ps 打印的标题)

  • sort -r 以相反的顺序对值进行排序(从高到低)

  • head -n 1 过滤sort 返回的数据,因此您丢弃除第一行以外的所有数据

【讨论】:

  • 这似乎给出了更准确的结果,但是,我如何拥有 112% 的单核 CPU?
  • 在这里你可以找到一个很好的解释:serverfault.com/questions/522922/cpu-more-than-100-in-ps-aux
  • 在这里您可以找到更多信息superuser.com/questions/174660/…
  • 根据他/她的代码,OP 正在寻找整个 CPU 使用率,而不是(单个)最高 CPU 消费者的使用率。
  • @higuaro 确实可能。 OP 使用的可疑代码与最近添加到那里最受好评的回复之一中的代码完全相同。如果他从该回复中选择了代码,他应该已经阅读了最后一条评论!
【解决方案2】:

为什么cpu负载变化不超过百分之几?

因为/proc/stat 返回自系统上次启动以来的汇总 CPU 负载统计信息,而不是实时统计信息。如果您在重新启动后立即运行脚本,则只要 CPU 负载本身发生变化,报告的负载可能会发生显着变化。但是,脚本运行的时间越长,负载变化对显示值的影响就越小,一段时间后,该值将基本保持不变。

如果您想从/proc/stat 计算负载而不使用已经可用的工具,您需要计算两个连续样本的差异,例如:

while sleep 5; do grep -w cpu /proc/stat ; done | \
    awk '{
        print (o2+o4-$2-$4)*100/(o2+o4+o5-$2-$4-$5) "%"
        o2=$2;o4=$4;o5=$5}'

否则,一种更简单但不太准确的方法可能是:

vmstat -n 5 | \
    awk '{used=$13+$14;total=used+$15
          if(total>0) print used*100/total "%"}'

【讨论】:

    【解决方案3】:

    为我自己的使用稍微修改了#3:

    for x in $(seq 1 11);do sleep 5;grep -w cpu /proc/stat ; done | \
    awk '{
        print (o2+o4-$2-$4)*100/(o2+o4+o5-$2-$4-$5) "%"
        o2=$2;o4=$4;o5=$5}'
    

    其中 seq 是采集的样本数,Sleep 仍然是样本之间的时间长度

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 它回答问题的额外上下文将显着改善其长期价值。请edit你的答案添加一些解释。
    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 2011-03-31
    相关资源
    最近更新 更多