缓存内存和共享内存的总和超过总内存

Han*_*hin 3 linux memory

当我运行时free -h,我得到:

             total       used       free     shared    buffers     cached
Mem:          251G       208G        43G       179G       144M       190G
-/+ buffers/cache:        17G       233G
Swap:         5.6G       5.6G       1.1M
Run Code Online (Sandbox Code Playgroud)

共享内存(179G)+缓存内存(190G)如何超过总内存(251G)?内存可以算作缓存内存和共享内存吗?

sou*_*edi 7

所有shared内存也算作cached

shared内存是使用tmpfs内部实现的。 tmpfs被实现为页面缓存的瘦包装器,只是没有任何后备存储(除了tmpfs可交换的)。


man free不解释这一点。至少在我的系统上(由 procps-ng 提供,上次更新时间为 2016-06-03)。对不起。所有man free告诉你的cache是取自Cachedin /proc/meminfo。如果您阅读man proc(从手册页,更新于 2017-09-15),它有文件中字段的meminfo文档,但它仍然无法通知您Cached包含Shmem.

你可以通过实验看到这一点。当您有free内存(没有available)时,您可以在 tmpfs 中创建一个文件,例如:

dd bs=1M count=100 < /dev/zero > /dev/shm/test.tmp
Run Code Online (Sandbox Code Playgroud)

这样做的结果是shared和 的cached数字都free -m增加了 100。

如果您只有available内存,并且没有足够的free内存来正确测试,您可以free通过运行echo 1 | sudo tee /proc/sys/vm/drop_caches. 当然,删除页面缓存可能对性能非常不利。不要在真正的服务器上这样做:-)。