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

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

当我跑步时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

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

答案1

所有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

结果是sharedcached数字都free -m增加了 100。

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

相关内容