Linux
Linux 記憶體:/proc/meminfo 和 free 之間的 Buffers+Cache 差異?
我有一個主機,在比較
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 緩衝區和記憶體的總和
但是,從上面的輸出中可以看出:
free
說buff/cache
是5859368
,但Buffers
和Cached
from的輸出/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