由于我在该网站上找到了有关缓冲区/缓存的讨论,而不是 SE 的 Unix,所以我在这里发布了我的问题。我读过在 Linux 中,free 命令报告的“buffers”和“cache”有什么区别?和free 输出中的 buffers/cache 行的含义,其中写道:
如果内存不足,缓存将被自动释放,因此它们并不重要。
目前free
报告的缓冲区/缓存为 8Gb,但是,当可用内存接近零时,系统会长时间无响应,并且sync; echo 3 > /proc/sys/vm/drop_caches
不会发生太大变化。为什么?我发布了输出free -m
以及更详细的输出cat /proc/meminfo
:
total used free shared buff/cache available
Mem: 15740 4508 2366 8453 8865 2474
MemTotal: 16118172 kB
MemFree: 528472 kB
MemAvailable: 475820 kB
Buffers: 1588 kB
Cached: 8939100 kB
SwapCached: 0 kB
Active: 6711540 kB
Inactive: 8440460 kB
Active(anon): 6621624 kB
Inactive(anon): 8402256 kB
Active(file): 89916 kB
Inactive(file): 38204 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 6211412 kB
Mapped: 1534592 kB
Shmem: 8812568 kB
Slab: 203244 kB
SReclaimable: 106932 kB
SUnreclaim: 96312 kB
KernelStack: 18736 kB
PageTables: 93880 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 8059084 kB
Committed_AS: 23933660 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 1761344 kB
DirectMap2M: 14704640 kB
DirectMap1G: 1048576 kB
答案1
/proc/sys/vm/drop_caches
在系统操作中没有用处。不要使用它,只会让系统变慢。
嗯,它确实有一些用途,但它们往往是极端情况。使用冷缓存测试存储,不寻常的虚拟内存工作负载。参见 Server Fault 上之前的介绍:为什么要在 Linux 中删除缓存?
即使Cached
将其视为零,该系统的内存利用率也已经相对较高。AnonPages
+Shmem
为 14 GB,仅比 少 1 GB MemTotal
。事实上,加上其他东西,MemAvailable
就是 0.5 GB。
一个关于多少 RAM 才够的猜测来自内核,Committed_AS
。足够不换页。这可能是一个有问题的指标,但它是少数几个直接估计物理 RAM 使用量的指标之一。从您的 meminfo 输出来看,大约 23 GB,或 的 150% MemTotal
。再多一半可能对某些工作负载来说没问题,但我对没有交换且怀疑内存容量有问题的系统感到不舒服。
有些总数加起来超过 100%,因为虚拟内存系统既懒惰又聪明。但它能做的也有限。共享内存(可能是数据库)和应用程序匿名内存加起来几乎和主机一样多,这会带来糟糕的性能风险。