当我跑步时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
取自Cached
in /proc/meminfo
。如果您阅读man proc
(来自手册页,更新于 2017-09-15),它包含文件中字段的文档meminfo
,但它仍然无法通知您Cached
包含Shmem
.
您可以通过实验看到这一点。当您有free
内存(没有available
)时,您可以在 tmpfs 中创建文件,例如:
dd bs=1M count=100 < /dev/zero > /dev/shm/test.tmp
结果是shared
和cached
数字都free -m
增加了 100。
如果您只有available
内存,并且没有足够的free
内存来正确测试它,则可以free
通过运行 删除尽可能多的页面缓存来创建内存echo 1 | sudo tee /proc/sys/vm/drop_caches
。当然,删除页面缓存可能对性能非常不利。不要在真实服务器上执行此操作:-)。