Desde o 3.14, o kernel do Linux rastreia quanta memória está realmente disponível - isto é, alocável sem bater swap, incluindo memória recuperável - na entrada MemAvailable
em /proc/meminfo
. Isso já inclui a memória recuperável rastreada como inativa, então não há necessidade de adicionar isso.
Em kernels mais antigos, você pode usar a fórmula dada na resposta a Como posso obter a quantidade de memória disponível de forma portável entre distribuições? :
awk -v low=$(grep low /proc/zoneinfo | awk '{k+=$2}END{print k}') \
'{a[$1]=$2}
END{
print a["MemFree:"]+a["Active(file):"]+a["Inactive(file):"]+a["SReclaimable:"]-(12*low);
}' /proc/meminfo