要了解CPU平均负载,我在uptime
脚本中使用ksh
:
uptime | awk '{print $11}' | sed '$s/.$//' | read CPU
然后我在那里使用变量CPU
。
$11
部分用于隔离最后五分钟部分。但是,我今天注意到这不起作用。具体来说,最后五分钟部分与$9
一起返回。该函数返回的参数较少。这是因为最近重新启动了计算机,因此uptime
显示重启后的分钟数,而不是几天和几分钟。
有没有办法让我能够始终只获得正常运行时间的最后五分钟?
答案 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'和subshell将函数变量与其他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}'
希望这对某人有帮助。