Wie bekomme ich mit vmstat% Speicherauslastung?

9

Ich muss eine Speicherauslastung in% von vmstat erhalten, aber ich verstehe einige der Zahlen, die sich auf den in vmstat angezeigten Speicher beziehen, nicht ganz.

Insbesondere bei einer solchen Ausgabe

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

Wie groß ist der Gesamtspeicher des Systems? Ist es 'swpd' + 'free' + 'buff' + 'cache', was insgesamt 1620612 ergibt?

Was ist die freie Speichermenge des Systems? Ist es 45396, wie in der Spalte "frei" angezeigt?

Das Problem ist, dass sie sich nicht summieren oder auch nur annähernd dem entsprechen, was "top" gemeldet hat. Die Ausgabe von 'top', die ich ungefähr zur gleichen Zeit wie 'vmstat's oben aufgenommen habe, ist:

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

Also ... Ich gehe davon aus, dass es in 'vmstat' versteckte Zahlen / Optionen geben muss, von denen ich nichts wusste?

Ich muss 'vmstat' für diesen Zweck verwenden und keine anderen Befehle, da dies in der Anforderung angegeben ist.

Im Idealfall möchte ich mit 'vmstat' die prozentuale Speichernutzung erreichen, wie in:

<used_memory>/<total_memory> * 100%.

Vielen Dank!

Seine
quelle

Antworten:

20

Was Sie suchen, ist die Ausgabe von "kostenlos":

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

Hier ist eine Tour:

Dies ist eine Box mit 768 MB physischem RAM und einer 500344 KB Swap-Partition.

759456KB wird "verwendet" (zweite Spalte, obere Zeile). Von diesem "verwendeten" Speicher sind 23132 KB Puffer (5. Spalte, obere Zeile) und 592484 KB (sechste Spalte, obere Zeile) Cache, so dass 144840 KB (2. Spalte, 2. Zeile) physischen Speicher verbleiben, der von aktiven Prozessen verwendet wird.

Wenn Sie bedenken, dass der von Puffern und Cache verwendete Speicher für Prozesse verwendet werden könnte, bleiben 630716 KB (3. Spalte, 2. Zeile) physischer Speicher frei.

Die Swap-Partition ist, wie gesagt, 500344 KB (1. Spalte, untere Zeile). 21972 KB (2. Spalte, untere Zeile) der Auslagerungsdatei werden verwendet, sodass 478372 KB (3. Spalte, untere Zeile) frei bleiben.

Ihre Definition von% freiem Speicher hängt also davon ab, ob Sie Puffer und Cache zählen oder nicht und ob Sie Swap zählen oder nicht.

Das sollte Ihnen genug geben, um einen Prozentsatz zu berechnen, wie Sie es für richtig halten.


Hier ist die Ausgabe von top und kostenlos:

$ 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

Sie können sehen, wie top und free übereinstimmen (wenn auch mit einem kleinen Unterschied - dies ist ein Mehrbenutzer-Computer, und die Speichernutzung der top- und free-Programme spiegelt sich dort wider).


Fügen Sie ein "-s" hinzu, wenn Sie vmstate aufrufen, und Sie sehen fast dieselbe Ausgabe, nur in einer anderen Form:

$ 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

Sie können sehen, dass vmstat alle die gleichen Nummern wie kostenlos anzeigt.

Evan Anderson
quelle
Beste Antwort, die ich bisher zu diesem verworrenen Thema gefunden habe!
Rinogo
2

Ich habe die gleiche Frage an Sie und habe eine Formel

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}'

Ich habe es auf vmstat Version von procps-ng 3.3.10 und vmstat von procps-ng 3.3.9 getestet

Chienchi Lo
quelle
1

Ich würde empfehlen, dass Sie dieses IBM Redbook "Linux Performance and Tuning Guidelines" ( http://www.redbooks.ibm.com/abstracts/redp4285.html?Open ) lesen . Es enthält Details zu den Daten, die von zahlreichen Befehlen zurückgegeben werden, und sollte Ihnen helfen.

Ich habe normalerweise den Befehl "free" unter Linux oder "cat / proc / meminfo" verwendet.

Aaron Bush
quelle
0

Hier ist eine POSIX- Shell-Funktion, die den gewünschten Prozentsatz auf die nächste Ganzzahl abrundet (für Skriptzwecke kann dies nützlicher sein, da arithmetische POSIX- Shell-Vergleichstests nur mit Ganzzahlen funktionieren):

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

Ausgabe (auf meinem System):

12

Gleiches gilt für free:

furp() { free | { read z; read a b c d; echo $((100*$c/$b)) ; } }
agc
quelle