free
我有一台主机,在比较命令的输出和 .txt 文件的内容时,我不确定内存利用率/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
是,但是和from5859368
的输出较少。Buffers
Cached
/proc/meminfo
主机CentOS Linux release 7.4.1708 (Core)
带有内核3.10.0-693.21.1.el7.x86_64
。主机上内存的主要消耗者是elasticsearch(java)。
谁能解释一下这种差异吗?
答案1
仔细查看手册页后,内存是“Slab”部分man free
:
cache Memory used by the page cache and slabs (Cached and Slab in /proc/meminfo)
要了解有关平板的更多信息,请参阅SlabInfo 管理页面:
概要:cat /proc/slabinfo
描述:Linux 内核中经常使用的对象(缓冲区头、索引节点、目录项等)都有自己的缓存。文件 /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
如何跨发行版获取可移植的可用内存量?更多细节。