Quello che stai cercando è l'output di "free":
$ free
total used free shared buffers cached
Mem: 775556 759456 16100 0 22132 592484
-/+ buffers/cache: 144840 630716
Swap: 500344 21972 478372
Ecco un tour:
Questa è una scatola con 768 MB di RAM fisica e una partizione di swap da 500344 KB.
759456KB è "usato" (seconda colonna, riga superiore). Di questa memoria "usata", 23132KB sono buffer (5a colonna, riga superiore) e 592484KB (sesta colonna, riga superiore) sono cache, lasciando 144840KB (2a colonna, 2a riga) di memoria fisica utilizzata dai processi attivi.
Se consideri che la memoria utilizzata dai buffer e dalla cache potrebbe essere utilizzata per i processi, rimangono 630716 KB (3a colonna, 2a riga) di memoria fisica libera.
La partizione di swap, come ho detto, è 500344KB (1a colonna, riga inferiore). 21972KB (2a colonna, riga inferiore) del file di scambio sono in uso, lasciando 478372KB (3a colonna, riga inferiore) liberi.
Quindi, la tua definizione di % di memoria libera dipende dal fatto che tu stia contando i buffer e la cache o meno, e se stai contando lo swap o meno.
Questo dovrebbe darti abbastanza per continuare a calcolare una percentuale come ritieni opportuno.
Ecco l'output di top e 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
Puoi vedere come top e free concordano (anche se con una piccola differenza:questa è una macchina multiutente e l'utilizzo della memoria dei programmi top e free si riflette lì).
Aggiungi una "-s" quando chiami vmstate e vedrai più o meno lo stesso output, solo in una forma diversa:
$ 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
Puoi vedere che vmstat mostra tutti gli stessi numeri di free.
Ho la stessa domanda con te e trovo una formula
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}'
L'ho testato sulla versione vmstat da procps-ng 3.3.10 e vmstat da procps-ng 3.3.9