【问题标题】:Get last five minutes load average using ksh with uptime使用 ksh 和 uptime 获取最后五分钟的平均负载
【发布时间】:2012-07-31 07:29:09
【问题描述】:

为了了解 CPU 平均负载,我在 ksh 脚本中使用了 uptime

uptime | awk '{print $11}' | sed '$s/.$//' | read CPU

我稍后会使用变量CPU

$11 部分用于隔离最后五分钟部分。但是,我今天注意到这不起作用。具体来说,最后五分钟部分以$9 返回。该函数返回的参数更少。这是因为机器最近重新启动,所以uptime 显示自重新启动后的分钟数而不是天数和分钟数。

有没有办法让我始终只获得正常运行时间的最后五分钟?

【问题讨论】:

  • 如果不清楚,这是一个新手的问题!

标签: unix cpu-usage ksh uptime


【解决方案1】:
cut -d ' ' -f2 /proc/loadavg

/proc/loadvg 是 uptime、w、who 等数据的来源。 它有一个更简单的格式,数字总是在小数部分前有一个点(正常运行时间等使用当前的语言环境,所以你可能会发现类似

平均负载:0,18, 0,26, 0,30

更难解析

plus 的速度快得令人难以置信! ;-)

【讨论】:

  • 这种方法有什么缺点吗?从表面上看,使用 upstart 似乎确实是一个更好的解决方案,即使它在技术上没有回答这个问题。 /proc/loadavg 是系统特定的还是需要某些权限?
  • 不适用于 *BSD,但应该适用于每个 linux 发行版,因为 procps 使用它(例如,正常运行时间是 procps 的一部分)gitorious.org/procps/procps/source/…
【解决方案2】:

尝试将“Load Average”之前的文字分开,然后在剩余部分使用awk

uptime | sed 's/.*load average: //' | awk -F\, '{print $2}'

【讨论】:

    【解决方案3】:

    读取倒数第二个字段可能比读取第 9 个或第 11 个字段更简单:

    uptime | awk '{print $(NF-1)}' FS=,
    

    【讨论】:

      【解决方案4】:

      这个小 shell 函数应该可以与 bash 或 ksh(93) 一起使用

          function loadavg {
              typeset minutes=$1 t1=$(uptime)
              echo ${t1#*load average: } | (
                  IFS=', ' && read L1 L5 L15
                  case $minutes in
                  (1)  echo $L1;;
                  (5)  echo $L5;;
                  (15) echo $L15;;
                  ("") echo $L1 $L5 $L15;;
                  (*)  echo "usage: loadavg [ 1 | 5 | 15 ]" 1>& 2
                  esac                
              )
          }
      

      解释:

      此代码使用 IFS 将 "load average:" 之后的字符串拆分为三个字段。 'typeset' 和 subshel​​l 将函数变量与其他 shell 变量隔离开来。

      以下对结果进行了简化,只返回了原来的答案 问题:

      function load5 {
          typeset t1=$(uptime)
          echo ${t1#*load average: } | (
              IFS=', ' && read L1 L5 L15
              echo $L5            
          )
      }
      

      【讨论】:

        【解决方案5】:

        这可以给你最好的结果 我正在使用它来获取每 5 分钟的平均负载:

        $ 正常运行时间 | awk '{ 打印 $11 }'| tr -d ','

        【讨论】:

          【解决方案6】:

          所以,我在编写一个在 Linux 和 Mac OS X 上都可以工作的程序时遇到了麻烦。经过一番努力,我想出了这个:

          uptime | sed 's/.*load average[s]*://' | awk '{print $3}'
          

          希望这对某人有帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-03-26
            • 2020-04-25
            • 1970-01-01
            • 2017-10-07
            • 1970-01-01
            • 2014-10-22
            • 2023-03-22
            相关资源
            最近更新 更多