vmstat
안녕하세요. 일부 테스트( ) 중에 기계 성능을 추적하기 위해 .을(를 ) 사용하고 있습니다 jmeter
. 이는 다른 많은 가상 머신(약 20개 가상 머신)이 설치된 대규모 머신에서 실행되는 가상 머신입니다.
다음 소프트웨어 버전을 사용하고 있습니다.
$ vmstat -V
procps version 3.2.7
$ uname -a
Linux cmbpm 2.6.32-042stab044.11 #1 SMP Wed Dec 14 16:02:00 MSK 2011 x86_64 x86_64 x86_64 GNU/Linux
문제는 내가 얻은 결과에 있습니다. 예는 다음과 같습니다(더 쉬운 데이터 처리를 위해 공백을 단일 탭으로 변환했습니다).
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 1506720 6152768 0 824836 1 0 3 2 0 0 0 0 94 6 0
0 0 1506720 6170744 0 804392 60 64 14 16 0 122651 0 0 98 2 0
0 1 1506720 6168328 0 801744 145 8 300 52 0 117308 0 0 0 100 0
0 0 1505688 6173360 0 806852 233 13 1135 478 0 109158 1 0 387 1171860851 0
0 0 1505172 6168988 0 810140 380 0 0 513 0 117875 0 0 97 3 0
문제는 일부 값이 원래보다 훨씬 크다는 것입니다. CPU 시간의 백분율 값( -----cpu------
분수)이 100%를 크게 초과하는 경우가 있습니다. 특히 컬럼 wa
(Waiting for data)이 문제가 됩니다(값 1171860851이 매우 이상합니다). 이러한 거대한 값을 0으로 바꾸면 합리적인 결과를 얻을 수 있습니다.
내 질문은 왜 잘못된 값을 제공하고 어떻게든 고칠 수 있습니까?
여기서는 머신 가상화가 문제인 것 같습니다.
답변1
일반적인 용의자는 다음과 같습니다.
vmstat
카운터 래핑은 처리되지 않을 수 있으며, 카운터는 자주 래핑되어서는 안 되며 iowait(정상 로드의 경우)보다 사용자/시스템/유휴 상태에서 더 많이 발생해야 합니다.vmstat
구문 분석할 수 없습니다/proc/stat
. 이는 64비트 데이터 유형으로 인해 직간접적으로 발생하거나 넓은 필드/누락/병합된 필드로 인한 오버플로 또는 구문 분석 오류 때문일 수 있습니다.- 시간 왜곡으로 인해 계산이 왜곡됨
커널은 user/nice/system/etc를 카운터(보통 100/CPU)로 추적하는 vmstat
반면, 다른 프로그램은 시간 증분(예: 5초)을 기준으로 평균을 계산합니다 vmstat 5
. 설명된 특정 증상은 없지만 정확한 타이밍은 가상 환경에서 문제가 될 수 있습니다( vmstat
동일한 타임스탬프를 사용하여 이 숫자를 계산합니다).
/proc/stat
procps/libproc를 확인한 후 긴 정수로 읽고 계산에 배정밀도 부동 소수점을 사용합니다. 아무런 문제도 볼 수 없습니다.
OpenVZ 커널을 실행 중입니다. /proc/stats
형식이 올바른지 확인해야 합니다. 아마도 다음 오류가 발생할 수 있습니다.https://bugzilla.openvz.org/show_bug.cgi?id=1376
구문 분석을 수행하면 더 나은 행운을 얻을 수 있습니다 /proc/vz/vestat
.http://wiki.openvz.org/Vestat