To, co hledáte, je výstup z "free":
$ free
total used free shared buffers cached
Mem: 775556 759456 16100 0 22132 592484
-/+ buffers/cache: 144840 630716
Swap: 500344 21972 478372
Zde je prohlídka:
Toto je krabice se 768 MB fyzické RAM a 500 344 KB odkládacím oddílem.
759456KB je "použito" (druhý sloupec, horní řádek). Z této „použité“ paměti tvoří 23132 kB vyrovnávací paměti (5. sloupec, horní řádek) a 592 484 kB (šestý sloupec, horní řádek) mezipaměť, takže zbývá 144 840 kB (2. sloupec, 2. řádek) fyzické paměti, kterou využívají aktivní procesy.
Když uvážíte, že paměť používaná vyrovnávacími pamětmi a mezipamětí by mohla být použita pro procesy, ponechává 630716 kB (3. sloupec, 2. řádek) volné fyzické paměti.
Odkládací oddíl, jak jsem řekl, má 500344KB (1. sloupec, spodní řádek). Používá se 21972 kB (2. sloupec, spodní řádek) odkládacího souboru, zbývá tedy 478 372 KB (3. sloupec, spodní řádek) volných.
Vaše definice % volné paměti tedy závisí na tom, zda počítáte vyrovnávací paměti a mezipaměť nebo ne, a zda počítáte swap nebo ne.
To by vám mělo dát dost na to, abyste mohli vypočítat procento, jak uznáte za vhodné.
Zde je výstup top a 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
Můžete vidět, jak se top a free shodují (i když s malým rozdílem – jedná se o víceuživatelský stroj a tam se odráží využití paměti top a volných programů).
Když zavoláte vmstate, přidejte "-s" a uvidíte téměř stejný výstup, jen v jiné podobě:
$ 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
Můžete vidět, že vmstat zobrazuje všechna stejná čísla jako free.
Mám na vás stejnou otázku a vymýšlím vzorec
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}'
Testoval jsem to na verzi vmstat z procps-ng 3.3.10 a vmstat z procps-ng 3.3.9