使用ksh和正常运行时间获得最后五分钟的平均负载

时间:2012-07-31 07:29:09

标签: unix cpu-usage ksh uptime

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

uptime | awk '{print $11}' | sed '$s/.$//' | read CPU
然后我在那里使用变量CPU

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

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

6 个答案:

答案 0 :(得分:7)

cut -d ' ' -f2 /proc/loadavg

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

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

更难解析

加上因为一个令人难以置信的低因子! ; - )

答案 1 :(得分:2)

尝试在"加载平均值"之前拆分文本,然后在剩余部分上使用awk

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

答案 2 :(得分:1)

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

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

答案 3 :(得分: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            
    )
}

答案 4 :(得分:0)

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

$ uptime | awk'{print $ 11}'| tr -d','

答案 5 :(得分:0)

所以,我在编写一个适用于Linux和Mac OS X的版本时遇到了麻烦。经过多次战斗,我想出了这个:

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

希望这对某人有帮助。