3

对于 CPU 平均负载的想法,我uptimeksh脚本中使用:

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

然后我稍后在其中使用该变量CPU

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

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

4

6 回答 6

9
cut -d ' ' -f2 /proc/loadavg

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

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

哪些更难解析

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

于 2013-05-22T09:06:10.360 回答
3

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

uptime | sed 's/.*load average: //' | awk -F\, '{print $2}'
于 2012-07-31T08:10:37.867 回答
1

阅读第 2 个到最后一个字段而不是第 9 个或第 11 个字段可能更简单:

uptime | awk '{print $(NF-1)}' FS=,
于 2012-07-31T22:18:09.240 回答
0

这个小 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            
    )
}
于 2012-07-31T16:36:29.580 回答
0

这可以给你最好的结果我用它来得到我每 5 分钟的平均负载:

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

于 2012-08-15T06:47:47.563 回答
0

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

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

希望这对某人有帮助。

于 2015-08-24T21:11:30.817 回答