Os arquivos / ferramentas padrão que relatam memória parecem ter diferentes formatos em diferentes distribuições Linux. Por exemplo, no Arch e 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
Então, como posso portável (somente nas distribuições Linux) e obter com segurança a quantidade de memória - excluindo swap - disponível para o meu software usar em um determinado momento? Presumivelmente, é isso que é mostrado como "disponível" e "MemAvailable" na saída do free
e cat /proc/meminfo
no Arch, mas como faço para obter o mesmo no Ubuntu ou em outra distribuição?
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
qual deve me dar o mesmo número impresso duas vezes. No entanto, o segundo número (minha compreensão do algoritmo você sugere) é maior do que oMemAvailable
mostrado na/proc/meminfo
. O que estou fazendo de errado?/proc/zoneinfo
conta páginas, com tamanho principalmente de 4KBamd64
; você também está perdendo a segurança extra adicionada ao cache da página e à memória recuperável. Simplificando o último, podemos subtrair a marca d'água baixa três vezes, para quem-12*low
(3 × 4KB) forneça o resultado correto no meu sistema. (Essa simplificação subestima a memória disponível se o cache da página ou a memória recuperável for menor que o dobro da marca d'água baixa, mas você não gostaria de usar muita memória nessa situação de qualquer maneira, para que isso pareça um compromisso razoável.)(file)
ouSReclaimable
entradas? Em uma caixa de centos mais antiga com o kernel v 2.6.18-348.16.1.el5xen (poruname -r
), esta é a saída que recebo: pastebin.com/iFWiM1kX . O seu cálculo única puxa aMemFree
parteEnquanto a resposta de Stephen é perfeitamente suficiente e erra por precaução, decidi escrever a lógica completa, incluindo as comparações mínimas. As informações são lidas primeiro em / proc / meminfo e armazenadas em uma variável para que os detalhes da memória sejam consistentes.
O resultado armazenado na variável está em bytes.
fonte