输入:
0:root@server:/root # vmstat 60 2
System configuration: lcpu=52 mem=131072MB ent=10.00
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------------------
r b avm fre re pi po fr sr cy in sy cs us sy id wa pc ec
5 0 13254063 12378057 0 0 0 0 0 0 3411 22516 9063 10 2 88 0 1.94 19.4
5 0 13341251 12290955 0 0 0 0 0 0 3507 20192 9062 9 2 89 0 1.88 18.8
0:root@server:/root #
所需输出:
0
它为零,因为平均 r < lcpu。在这种情况下,“id”值并不重要。
另一个输入:
0:root@server:/root # vmstat 60 2
System configuration: lcpu=52 mem=131072MB ent=10.00
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------------------
r b avm fre re pi po fr sr cy in sy cs us sy id wa pc ec
52 0 13254063 12378057 0 0 0 0 0 0 3411 22516 9063 10 2 6 0 1.94 19.4
53 0 13341251 12290955 0 0 0 0 0 0 3507 20192 9062 9 2 4 0 1.88 18.8
0:root@server:/root #
所需输出:
95
它是95,因为平均r > lcpu。是95,因为id表示空闲,但是我们需要cpu消耗。所以 6+4 是空闲值,它们的平均值是 5。所以 100-5 = 95% 是 cpu 负载。
“r”中也需要平均值!不只是在“id”中。在上一个示例中,它是 52.5,因此它大于 52。
这是衡量 CPU 消耗的通用 UNIX 问题。如果 r > lcpu 并且 cpu 使用率百分比非常高,则存在 CPU 瓶颈。
有趣的是,没有处理 vmstat 输出的解决方案,这就是为什么我向 awk 大师询问这个问题。
问题:所以我需要这样的东西:“vmstat 60 2 | GODLY-AWK-MAGIC-HERE”
欲了解更多详细信息,请参阅(我找不到更好的链接):
http://aix4admins.blogspot.com/2011/09/vmstat-t-5-3-shows-3-statistics-in-5.html
如果可运行线程 (r) 除以 CPU 数量大于 1 -> 可能是 CPU 瓶颈
答案1
非常粗暴:
awk '
BEGIN { d = -1 }
/lcpu/ { lcpu = substr($3, 6); next }
$1 == "r" { ++d; next }
d < 0 { next }
{
++d
r += $1
id += $16
next
}
END {
if (r / d > lcpu)
print 100 - id / d
else
print 0
}
'
或者如果你喜欢:
awk '
/lcpu/ { lcpu=substr($3, 6) }
$1 ~ /[0-9]+/ {
++d
r += $1
id += $16
next
}
END {
print (r/d>lcpu) ? 100 - id / d : 0
}
'
到:
awk '/lcpu/{lcpu=substr($3,6)}$1~/[0-9]+/{++d;r+=$1;id+=$16;next;}END{print(r/d>lcpu)?100-id/d:0}'
它能给出您想要的结果吗?