vmstat로 메모리 사용량 %를 얻는 방법은 무엇입니까?

vmstat로 메모리 사용량 %를 얻는 방법은 무엇입니까?

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%.

감사해요!

답변1

당신이 찾고 있는 것은 "free"의 출력입니다:

$ 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(두 번째 열, 맨 아래 행)가 사용 중이며 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와 동일한 숫자가 모두 표시되는 것을 볼 수 있습니다.

답변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에서 테스트했습니다.

답변3

이 IBM 레드북 "Linux 성능 및 조정 지침"(http://www.redbooks.ibm.com/abstracts/redp4285.html?열기). 여기에는 수많은 명령에서 반환된 데이터에 대한 세부 정보가 포함되어 있어 도움이 될 것입니다.

나는 일반적으로 Linux에서 "free" 명령이나 "cat /proc/meminfo"를 사용했습니다.

답변4

여기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)) ; } }

관련 정보