Belleği bildiren standart dosyalar / araçlar, farklı Linux dağıtımlarında farklı biçimlere sahip gibi görünmektedir. Örneğin, Arch ve Ubuntu'da.
kemer
$ free total used free shared buff/cache available Mem: 8169312 3870392 2648348 97884 1650572 4110336 Swap: 16777212 389588 16387624 $ head /proc/meminfo MemTotal: 8169312 kB MemFree: 2625668 kB MemAvailable: 4088520 kB Buffers: 239688 kB Cached: 1224520 kB SwapCached: 17452 kB Active: 4074548 kB Inactive: 1035716 kB Active(anon): 3247948 kB Inactive(anon): 497684 kB
Ubuntu
$ free total used free shared buffers cached Mem: 80642828 69076080 11566748 3063796 150688 58358264 -/+ buffers/cache: 10567128 70075700 Swap: 20971516 5828472 15143044 $ head /proc/meminfo MemTotal: 80642828 kB MemFree: 11565936 kB Buffers: 150688 kB Cached: 58358264 kB SwapCached: 2173912 kB Active: 27305364 kB Inactive: 40004480 kB Active(anon): 7584320 kB Inactive(anon): 4280400 kB Active(file): 19721044 kB
Peki, yazılımımın belirli bir zamanda kullanabileceği portatif olarak (yalnızca Linux dağıtımlarında) ve takas hariç bellek miktarını nasıl güvenilir bir şekilde alabilirim? Muhtemelen Arch çıktısında free
ve Arch'de "kullanılabilir" ve "MemAvailable" olarak gösterilen şey budur, cat /proc/meminfo
ancak Ubuntu'da veya başka bir dağıtımda bunu nasıl alabilirim?
awk -v low=$(grep low /proc/zoneinfo | awk '{k+=$2}END{print k}') '{a[$1]=$2}END{m=a["MemFree:"]+a["Active(file):"]+a["Inactive(file):"]+a["SReclaimable:"]; print a["MemAvailable:"],m-low}' /proc/meminfo
Bana iki kez basılmış aynı sayı vermelidir önerinizi test ediyorum . Ancak, ikinci sayı (önerdiğiniz algoritmayı anladığım),MemAvailable
gösterilenden daha yüksek/proc/meminfo
. Neyi yanlış yapıyorum?