Linux

Linux 記憶體:/proc/meminfo 和 free 之間的 Buffers+Cache 差異?

  • May 16, 2018

我有一個主機,在比較free命令的輸出和/proc/meminfo. 緩衝區+記憶體似乎在兩個來源之間不匹配。

[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說:

buff/cache 緩衝區和記憶體的總和

但是,從上面的輸出中可以看出: freebuff/cache5859368,但BuffersCachedfrom的輸出/proc/meminfo較少。

主機CentOS Linux release 7.4.1708 (Core)與核心3.10.0-693.21.1.el7.x86_64。主機上記憶體的主要消費者是 elasticsearch (java)。

誰能解釋這種差異?

仔細查看手冊頁後,記憶體是“Slab”部分man free

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

要了解有關平板的更多資訊,請參閱SlabInfo 管理頁面

概要:cat /proc/slabinfo

描述:Linux 核心中經常使用的對象(緩衝區頭、索引節點、dentries 等)都有自己的記憶體。文件 /proc/slabinfo 給出了這些記憶體的統計資訊。

所以一般來說,既然它是記憶體,那麼 Slab 被填滿是可以的。一個值得關注的領域可能是大量不可回收的 ( SUnreclaim)。這可以在以下位置查看/proc/meminfo

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

如果要估計可用記憶體,那麼較新的 3.14 核心有一個比舊的 Total-Buffer-Cache 更準確的估計值,請參閱如何跨發行版可移植地獲得可用記憶體量MemAvailable?更多細節。/proc/meminfo

引用自:https://unix.stackexchange.com/questions/443985