Maneira portátil de analisar / proc / meminfo

2

Estou tendo problemas para encontrar um código genérico que funcione, aqui, para as versões do CentOS 5/6 e do CentOS 7, o arquivo / proc / meminfo. Eu quero calcular a "memória Real Used" como free faz.

(quantias divididas por 1024 para cálculo mental mais fácil)

CentOS 6:

[root@web2-1 ~]# cat /proc/meminfo | gawk '{ $2=int($2/1024) ; print $0}' && free -m
MemTotal: 3038 kB
MemFree: 2580 kB
Buffers: 34 kB
Cached: 350 kB
SwapCached: 0 kB
Active: 216 kB
Inactive: 189 kB
Active(anon): 21 kB
Inactive(anon): 1 kB
Active(file): 195 kB
Inactive(file): 188 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 2185 kB
HighFree: 1807 kB
LowTotal: 852 kB
LowFree: 772 kB
SwapTotal: 4095 kB
SwapFree: 4095 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 21 kB
Mapped: 12 kB
Shmem: 1 kB
Slab: 30 kB
SReclaimable: 22 kB
SUnreclaim: 8 kB
KernelStack: 1 kB
PageTables: 1 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 5615 kB
Committed_AS: 145 kB
VmallocTotal: 120 kB
VmallocUsed: 6 kB
VmallocChunk: 99 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2 kB
DirectMap4k: 9 kB
DirectMap2M: 876 kB
             total       used       free     shared    buffers     cached
Mem:          3038        458       2580          1         34        350
-/+ buffers/cache:         72       2966 
Swap:         4095          0       4095 

Saída desejada: 73, que é MemTotal - MemFree - Buffers - Em cache

CentOS 7:

[maxime@g7r0x64-pkgbuild-mock-dev libexec]$ cat /proc/meminfo | gawk '{ $2=int($2/1024) ; print $0}' && free -m
MemTotal: 993 kB
MemFree: 89 kB
MemAvailable: 710 kB
Buffers: 0 kB
Cached: 681 kB
SwapCached: 5 kB
Active: 341 kB
Inactive: 361 kB
Active(anon): 4 kB
Inactive(anon): 23 kB
Active(file): 336 kB
Inactive(file): 337 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 4095 kB
SwapFree: 4072 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 16 kB
Mapped: 11 kB
Shmem: 7 kB
Slab: 134 kB
SReclaimable: 111 kB
SUnreclaim: 23 kB
KernelStack: 2 kB
PageTables: 3 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 4592 kB
Committed_AS: 174 kB
VmallocTotal: 33554431 kB
VmallocUsed: 145 kB
VmallocChunk: 33554275 kB
HardwareCorrupted: 0 kB
AnonHugePages: 2 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2 kB
DirectMap4k: 39 kB
DirectMap2M: 984 kB
              total        used        free      shared  buff/cache   available
Mem:            993          87          89           7         816         710
Swap:          4095          23        4072

O problema é que free me dá 816 MB para buffer + cache ao mesmo tempo. Onde estão faltando 130 MB ~?

Eu sei que eu poderia fazer MemTotal - MemDisponível para usar meu real, mas MemAvailable não existe na versão anterior, e gostaria que meu código funcionasse com ambas as versões do arquivo meminfo ...

EDIT: por "portátil" quero dizer que eu gostaria que o código funcionasse para ambos os núcleos 2.6 e 3.10 (o que significa versões 5-7 do CentOS / RHEL), mas eu acho que vou ter que fazer um grande "if" no meu código ...

    
por mveroone 10.09.2015 / 11:56

0 respostas