Memória Linux: Discrepância para Buffers + Cache entre / proc / meminfo e free?

0

Eu tenho um host e não tenho certeza sobre a utilização da memória ao comparar a saída do comando free e o conteúdo de /proc/meminfo . Buffers + Cache não parecem corresponder entre as duas fontes.

[kbrandt@ny-chsearch01]~% free -k
              total        used        free      shared  buff/cache   available
Mem:       24506972    18074768      572836         124     5859368     5996392
Swap:       4194300      130044     4064256
[kbrandt@ny-chsearch01]~% cat /proc/meminfo 
MemTotal:       24506972 kB
MemFree:          575808 kB
MemAvailable:    5996136 kB
Buffers:            3140 kB
Cached:           380032 kB
SwapCached:        61344 kB
Active:         16305144 kB
Inactive:        1860568 kB
Active(anon):   15990712 kB
Inactive(anon):  1791952 kB
Active(file):     314432 kB
Inactive(file):    68616 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4194300 kB
SwapFree:        4064256 kB
Dirty:                24 kB
Writeback:             0 kB
AnonPages:      17721372 kB
Mapped:            91608 kB
Shmem:               124 kB
Slab:            5472968 kB
SReclaimable:    5407820 kB
SUnreclaim:        65148 kB
KernelStack:        5568 kB
PageTables:        39784 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    16447784 kB
Committed_AS:   18211456 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      231460 kB
VmallocChunk:   34359310332 kB
HardwareCorrupted:     0 kB
AnonHugePages:  17414144 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       91968 kB
DirectMap2M:    25073664 kB

man free diz:

buff/cache Sum of buffers and cache

No entanto, como você pode ver na saída acima: free diz buff/cache é 5859368 , mas a saída de Buffers e Cached de /proc/meminfo é menor.

O host é CentOS Linux release 7.4.1708 (Core) com o kernel 3.10.0-693.21.1.el7.x86_64 . Principal consumidor de memória no host é elasticsearch (java).

Alguém pode explicar a discrepância?

    
por Kyle Brandt 15.05.2018 / 19:59

1 resposta

2

A memória é a seção 'Slab', depois de olhar mais de perto a página do manual man free :

cache  Memory used by the page cache and slabs (Cached and Slab in /proc/meminfo)

Para saber mais sobre a laje, consulte Página Gerenciar SlabInfo :

SYNOPSIS: cat /proc/slabinfo

DESCRIPTION: Frequently used objects in the Linux kernel (buffer heads, inodes, dentries, etc.) have their own cache. The file /proc/slabinfo gives statistics on these caches.

Então, em geral, como é cache, não há problema em preencher o Slab. A única área de preocupação pode ser uma grande quantidade, se não for recuperável ( SUnreclaim ). Isso pode ser visto em /proc/meminfo :

[root@ny-chsearch01 ~]# grep -i S.*recl /proc/meminfo 
SReclaimable:    5320344 kB
SUnreclaim:        64756 kB

Se alguém quiser estimar a memória livre, o kernel 3.14 mais novo tem uma% métrica MemAvailable em /proc/meminfo , que é uma estimativa mais precisa do que o Cache Total de Buffer mais antigo, consulte Como posso obter a quantidade de memória disponível de forma portável entre distribuições? para mais detalhes.

    
por 15.05.2018 / 20:32