如何配置 Linux 以使用更少的内存进行缓存?

如何配置 Linux 以使用更少的内存进行缓存?

我有一个后续问题377448,但没有足够的代表来发表评论。

在我因为问了同样的愚蠢问题而受到指责之前,请允许我说我已经阅读了很多关于缓存的类似帖子和答案,我明白那里发生了什么,但我还没有找到适合我的情况的答案。这就是;

VirtualBox 与其文档目前所述相反,在客户虚拟机启动时不会从主机分配全部基本内存,而是根据客户需求进行分配。我没有调整、基准测试并重新调整基本内存以适应不断变化的虚拟机,而是为其分配了足够多的内存 - 4 GB。

我注意到的是,启动后不久,虚拟机消耗了大约 2 Gig,但随着时间的推移,即使虚拟机中运行的应用程序大部分处于空闲状态,Linux 内存缓存也会慢慢膨胀,直到达到 4 Gig 的限制。

由于笔记本电脑上的 RAM 非常宝贵,而我的处理(性能)要求很低,因此我添加了一个 cron @reboot 命令,如下所示;

@reboot root while true; do sleep 1; /sbin/sysctl -w vm.drop_caches=3; done

这种方式消除了持续增长,但不会明显降低性能。1 秒的间隔可能太激进,但我稍后会进行实验。

我对结果非常满意,但这个解决方案看起来像是一个野蛮的黑客攻击。

是否存在现有的方法可以将内存缓存配置为“懒惰”/“积极”或“高性能”/“低性能”或提供一些缓存大小限制或缓存清除间隔?

答案1

您似乎有两个相互冲突的要求。“我想为该主机分配 4G”和“我不希望该主机使用 4G”。

除此之外,什么让你认为删除这些缓存会导致虚拟机管理程序删除映射中的内存?

在虚拟机管理程序(virtualbox 主机)上,可能会发生需求分页 - 这很好,但您认为正在发生的事情可能并非如此。

请求虚拟内存有两个阶段。

  • 承诺什么
  • 分配了什么

VM 启动时会分配 4G 内存。有,但不一定实际会用到多少。

当虚拟机开始消耗内存时,它会根据需要分配页面,直到达到已提交的页面为止。分配实际上是将内存放入 RAM/交换中。

在您的场景中,VM 确实可能(我不知道 VirtualBox 模型,但我相信您的话)分配 4G 内存。当 VM 填满页面缓存时,它将分配所有内存,正如您提到的那样。什么惯于然而,当您在虚拟机上删除缓存时,virtualbox 会释放已分配的内存。

因此,通过刷新页面缓存,虽然虚拟机上的内存看起来是空闲的,但实际上仍然分配并用于虚拟机管理程序。

因此,您并没有在主机笔记本电脑上节省任何内存,事实上,您只是浪费了它,因为原本可用于防止虚拟机中的 I/O 查找的内存不再可用。

相关内容