Wie erhält man mit vmstat die prozentuale Speichernutzung?

Wie erhält man mit vmstat die prozentuale Speichernutzung?

Ich muss von vmstat die Speichernutzung in % abrufen, verstehe aber einige der in vmstat angezeigten Zahlen zum Speicher nicht ganz.

Insbesondere bei einer Ausgabe wie dieser

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 das „swpd“ + „free“ + „buff“ + „cache“, was zusammen 1620612 ergibt?

Wie viel freier Speicher ist im System vorhanden? Beträgt er 45396, wie in der Spalte „Frei“ angegeben?

Das Problem ist, dass sie nicht zusammenpassen oder auch nur annähernd mit dem übereinstimmen, was „top“ gemeldet hat. Die Ausgabe von „top“, die ich ungefähr zur gleichen Zeit wie die von „vmstat“ oben erstellt habe, lautet:

[...]
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 zu diesem Zweck „vmstat“ und keine anderen Befehle verwenden, da dies in der Anforderung festgelegt ist.

Was ich im Idealfall mit „vmstat“ erreichen möchte, ist die prozentuale Speichernutzung, also:

<used_memory>/<total_memory> * 100%.

Danke!

Antwort1

Was Sie suchen, ist die Ausgabe von „free“:

$ 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 großen Swap-Partition.

759456 KB sind „benutzt“ (zweite Spalte, obere Zeile). Von diesem „benutzten“ Speicher sind 23132 KB Puffer (fünfte Spalte, obere Zeile) und 592484 KB (sechste Spalte, obere Zeile) Cache, sodass 144840 KB (zweite Spalte, zweite Zeile) physischer Speicher übrig bleiben, der von aktiven Prozessen genutzt wird.

Wenn Sie berücksichtigen, 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 groß (1. Spalte, unterste Reihe). 21972 KB (2. Spalte, unterste Reihe) der Swap-Datei werden verwendet, sodass 478372 KB (3. Spalte, unterste Reihe) frei bleiben.

Ihre Definition des % freien Speichers hängt also davon ab, ob Sie Puffer und Cache zählen oder nicht und ob Sie Swap zählen oder nicht.

Damit sollten Sie über genügend Informationen verfügen, um anschließend den Prozentsatz nach Ihrem Ermessen zu berechnen.


Hier ist die Ausgabe von top und 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

Sie können sehen, wie die besten und kostenlosen Programme übereinstimmen (wenn auch mit einem kleinen Unterschied – dies ist eine Mehrbenutzermaschine und die Speichernutzung der besten und kostenlosen Programme wird dort berücksichtigt).


Fügen Sie beim Aufruf von vmstate ein „-s“ hinzu, und Sie erhalten nahezu 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 dieselben Zahlen wie „frei“ anzeigt.

Antwort2

Ich habe die gleiche Frage wie Sie und habe eine Formel gefunden

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 der vmstat-Version von procps-ng 3.3.10 und vmstat von procps-ng 3.3.9 getestet.

Antwort3

Ich empfehle Ihnen, das IBM Redbook „Linux Performance and Tuning Guidelines“ (http://www.redbooks.ibm.com/abstracts/redp4285.html?Open). Es enthält Details zu den von zahlreichen Befehlen zurückgegebenen Daten und sollte Ihnen helfen.

Normalerweise habe ich den Befehl „free“ in Linux oder „cat /proc/meminfo“ verwendet.

Antwort4

Hier ist einPOSIXShell-Funktion, die den gewünschten Prozentsatz auf die nächste Ganzzahl abrundet (für Skriptzwecke kann dies nützlicher sein, daPOSIXShell-Arithmetik-Vergleichstests funktionieren nur mit ganzen Zahlen):

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

Ausgabe (auf meinem System):

12

Dasselbe mit free:

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

verwandte Informationen