vmstat로 % 메모리 사용량을 얻는 방법?


9

vmstat에서 %의 메모리 사용량을 가져와야하지만 vmstat에 표시된 메모리와 관련된 숫자 중 일부를 이해하지 못합니다.

특히 다음과 같은 출력이 주어지면

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 139728  45396 199128 1236360    1    2     4   622    3    1 51  4 43  2  0

시스템의 총 메모리 양은 얼마입니까? 'swpd'+ 'free'+ 'buff'+ 'cache'는 총 1620612입니까?

시스템의 사용 가능한 메모리 양은 얼마입니까? '무료'열에 표시된 45396입니까?

문제는 그들이 '상단'이보고 한 내용을 합치 지 않거나 가까이 보지 않는다는 것입니다. 위의 'vmstat'와 같은 시간에 가져온 'top'의 출력은 다음과 같습니다.

[...]
Mem:   4059616k total,  3965504k used,    94112k free,   200020k buffers
[...]

그래서 ... 나는 모르는 'vmstat'에 숨겨진 숫자 / 옵션이 있어야한다고 가정하고 있습니까?

요구 사항에 명시된 것과 같이 다른 명령이 아닌이 목적으로 'vmstat'를 사용해야합니다.

이상적으로, 'vmstat'에서 달성하고자하는 것은 % 메모리 사용량입니다.

<used_memory>/<total_memory> * 100%.

감사!


답변:


20

당신이 찾고있는 것은 "무료"의 출력입니다.

$ free
             total       used       free     shared    buffers     cached
Mem:        775556     759456      16100          0      22132     592484
-/+ buffers/cache:     144840     630716
Swap:       500344      21972     478372

둘러보기는 다음과 같습니다.

768MB의 물리적 RAM과 500344KB의 스왑 파티션이있는 상자입니다.

759456KB가 "사용됨"(두 번째 열, 맨 위 행)입니다. 이 "사용 된"메모리 중 23132KB는 버퍼 (5 번째 열, 최상위 행)이고 592484KB (6 번째 열, 최상위 행)는 캐시이며 활성 프로세스에서 사용중인 실제 메모리는 144840KB (2 번째 열, 2 번째 행)입니다.

버퍼 및 캐시에서 사용하는 메모리를 프로세스에 사용할 수 있다고 생각하면 실제 메모리의 630716KB (3 번째 열, 2 번째 행)가 사용 가능한 상태가됩니다.

내가 말했듯이 스왑 파티션은 500344KB (첫 번째 열, 맨 아래 행)입니다. 스왑 파일의 21972KB (2 번째 열, 아래쪽 행)가 사용 중이며 478372KB (3 번째 열, 아래쪽 행)를 비워 둡니다.

따라서 사용 가능한 메모리 비율에 대한 정의는 버퍼 및 캐시를 계산하는지 여부와 스왑을 계산하는지 여부에 따라 다릅니다.

그것은 당신이 적합하다고 생각할 때 백분율을 계산하기에 충분할 것입니다.


다음은 top과 free의 출력입니다.

$ top -n1 | grep "used," ; free
Mem:    775556k total,   751472k used,    24084k free,    20776k buffers
Swap:   500344k total,    21972k used,   478372k free,   586648k cached

             total       used       free     shared    buffers     cached
Mem:        775556     751344      24212          0      20776     586648
-/+ buffers/cache:     143920     631636
Swap:       500344      21972     478372

top과 free가 어떻게 동의하는지 알 수 있습니다 (약간의 차이는 있지만 이것은 다중 사용자 시스템이며 top과 free 프로그램의 메모리 사용량이 여기에 반영됩니다).


vmstate를 호출 할 때 "-s"를 추가하면 다른 형식으로 거의 동일한 출력을 볼 수 있습니다.

$ vmstat -s ; free
       775556  total memory
       759920  used memory
       674680  active memory
        18440  inactive memory
        15636  free memory
        21892  buffer memory
       594372  swap cache
       500344  total swap
        21972  used swap
       478372  free swap
       ... output truncated ...

             total       used       free     shared    buffers     cached
Mem:        775556     759920      15636          0      21892     594372
-/+ buffers/cache:     143656     631900
Swap:       500344      21972     478372

vmstat가 free와 동일한 숫자를 모두 표시하고 있음을 알 수 있습니다.


이 복잡한 주제에 대해 아직 찾은 최고의 답변!
rinogo 2016 년

2

나는 당신과 같은 질문을하고 수식을 생각해 냈습니다.

vmstat -s | awk  ' $0 ~ /total memory/ {total=$1 } $0 ~/free memory/ {free=$1} $0 ~/buffer memory/ {buffer=$1} $0 ~/cache/ {cache=$1} END{print (total-free-buffer-cache)/total*100}'

procps-ng 3.3.10의 vmstat 버전과 procps-ng 3.3.9의 vmstat에서 테스트했습니다.



0

다음 은 원하는 백분율을 가장 가까운 정수로 반올림 하는 POSIX 셸 함수입니다. POSIX 셸 산술 비교 테스트는 정수로만 작동 하므로 스크립팅 목적에 더 유용 할 수 있습니다 .

# Vmstat (derived) Used Ram Percent
vurp() { vmstat -s | { read a b ; read c d ; echo $((100*$c/$a)) ; } ; }
vurp

출력 (내 시스템에서) :

12

같은 것 free:

furp() { free | { read z; read a b c d; echo $((100*$c/$b)) ; } }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.