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 ...