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