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.
759456KB ist "benutzt" (zweite Spalte, obere Reihe). Von diesem „benutzten“ Speicher sind 23.132 KB Puffer (5. Spalte, oberste Reihe) und 592.484 KB (sechste Spalte, oberste Reihe) Cache, sodass 144.840 KB (2. Spalte, 2. Reihe) physischer Speicher übrig bleiben, 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) an physischem Speicher frei.
Die Swap-Partition ist, wie gesagt, 500344 KB groß (1. Spalte, untere Reihe). 21972 KB (2. Spalte, untere Reihe) der Auslagerungsdatei sind belegt, sodass 478.372 KB (3. Spalte, untere Reihe) 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 reichen, um einen Prozentsatz zu berechnen, wie Sie es für richtig halten.
Hier ist die Ausgabe von top and 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 Top und Free übereinstimmen (wenn auch mit einem kleinen Unterschied – dies ist ein Mehrbenutzer-Computer und die Speichernutzung der Top- und Free-Programme wird darin widergespiegelt).
Fügen Sie ein "-s" hinzu, wenn Sie vmstate aufrufen, und Sie werden fast die gleiche Ausgabe sehen, 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 Zahlen als kostenlos anzeigt.
Ich habe dieselbe Frage wie 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 der vmstat-Version von procps-ng 3.3.10 und vmstat von procps-ng 3.3.9 getestet