입력하다:
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이므로 0입니다. 이 경우 "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
평균 r > lcpu이므로 95입니다. ID가 유휴 상태를 나타내므로 95이지만 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}'
원하는 결과를 제공합니까?