Linux:删除缓存不会释放缓冲区/缓存-为什么?

Linux:删除缓存不会释放缓冲区/缓存-为什么?

由于我在该网站上找到了有关缓冲区/缓存的讨论,而不是 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%,因为虚拟内存系统既懒惰又聪明。但它能做的也有限。共享内存(可能是数据库)和应用程序匿名内存加起来几乎和主机一样多,这会带来糟糕的性能风险。

相关内容