Los archivos / herramientas estándar que informan sobre la memoria parecen tener diferentes formatos en diferentes distribuciones de Linux. Por ejemplo, en Arch y Ubuntu.
Arco
$ 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
Entonces, ¿cómo puedo obtener de forma portátil (solo en las distribuciones de Linux) y obtener de forma confiable la cantidad de memoria, excluyendo el intercambio, que está disponible para que mi software la use en un momento determinado? Presumiblemente, eso es lo que se muestra como "disponible" y "MemAvailable" en la salida free
y cat /proc/meminfo
en Arch, pero ¿cómo obtengo lo mismo en Ubuntu u otra distribución?
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
cual debería darme el mismo número impreso dos veces. Sin embargo, el segundo número (según entiendo el algoritmo que sugiere) es más alto que el que seMemAvailable
muestra en/proc/meminfo
. ¿Qué estoy haciendo mal?