Medição de ram livre através de / proc / meminfo com ramdisk (initrd)

4

Eu estou inicializando uma imagem de disco via PXE, é um sistema completo em um disco initrd . Eu gostaria de medir a memória livre real do sistema (não incluindo buffers e cache do sistema de arquivos). Foi-me dito que isso é feito adicionando os valores MemFree, Buffers e Cached de /proc/meminfo . Para um sistema regular, isso fornece resultados precisos.

No entanto, com a configuração do meu ramdisk, ele não fornece resultados precisos. Eu suponho que a memória que é usada pelo ramdisk é adicionada ao valor "Em cache":

[root@node1 ~]# cat /proc/meminfo
MemTotal:        8173700 kB
MemFree:         7443696 kB
Buffers:               0 kB
Cached:           650236 kB
SwapCached:            0 kB
MemCommitted:          0 kB
VirtualSwap:           0 kB
Active:            27156 kB
Inactive:         632204 kB
Active(anon):       4636 kB
Inactive(anon):     4616 kB
Active(file):      22520 kB
Inactive(file):   627588 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:          9156 kB
Mapped:             8712 kB
Shmem:               128 kB
Slab:              38548 kB
SReclaimable:      29420 kB
SUnreclaim:         9128 kB
KernelStack:         536 kB
PageTables:         1268 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4086848 kB
Committed_AS:      51216 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      288032 kB
VmallocChunk:   34359448036 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       10240 kB 
DirectMap2M:     8378368 kB

Agora, isso infelizmente me fornece valores incorretos para duas métricas que gostaria de calcular:% MemUsed e AmountMemFreeActual. Com um Ramdisk, o valor "Em cache" é, pelo menos em parte, irrecuperável e, portanto, não pode ser usado para calcular a memória livre real.

Para calcular corretamente, eu precisaria saber o uso de memória do ramdisk, e eu não acho que posso simplesmente pegar o valor "Cached", já que isso também pode incluir outros dados do sistema de arquivos em cache.

De preferência, eu gostaria de tirar o uso da memória ramdisk da imagem para ambas as métricas, uma vez que é a memória não recuperável AFAIK. Alguma idéia de onde procurar?

Editar: "livre" (@ answer1) fornece os mesmos valores errados. O valor "livre" da saída "livre" é enganador de qualquer maneira. A memória "Free" é normalmente "Free" + "Buffers" + "Cached". Meu problema é que o ramdisk como memória não recuperável (diferentemente dos dados do sistema de arquivos em cache) não pode ser recuperado.

    
por dfens123 22.05.2013 / 14:40

1 resposta

1

Existe uma razão pela qual você não pode usar o comando free para determinar quanta RAM está disponível?

# free output in MBs
$ free -m
             total       used       free     shared    buffers     cached
Mem:          7800       6724       1075          0        397       1952
-/+ buffers/cache:       4374       3425
Swap:         5823         27       5796

O exemplo acima mostra que, sem os buffers e o cache, há ~ 3,4 GB livres.

    
por 23.05.2013 / 04:32