我如何configurationLinux使用更less的内存进行caching?

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

在我问一个同样愚蠢的问题之前,让我说我已经阅读了很多类似的post和有关caching的答案,而且我知道那里正在发生什么,但是我还没有find符合我的上下文的答案。 这是什么

与其文档目前所述相反,VirtualBox在guest虚拟机启动时不会从主机分配完整的基本内存,而是按照guest虚拟机的需求进行分配。 而不是调整和基准标记和重新调整基础内存,以适应不断变化的虚拟机,我分配它绰绰有余 – 4千兆。

我注意到,启动后不久,虚拟机消耗大约2千兆,但是随着时间的推移,即使运行在虚拟机上的应用大部分空闲,linux内存caching也会缓慢地膨胀,直到达到4千兆的限制。

由于笔记本电脑上的RAM非常珍贵,而且我的处理(性能)要求很低,所以我添加了一个像这样的cron @ reboot命令;

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

从而以不会显着降低性能的方式消除了持续增长。 1秒的时间间隔可能过于激进,但我会稍后进行试验。

我对结果非常满意,但这个解决scheme看起来像一个粗暴的黑客。

有没有一种现有的方法来configuration内存caching为“懒惰”/“积极”或“高性能”/“低性能”,或提供一些caching大小限制或caching清除间隔?

你似乎有两个相互矛盾的要求。 “我想分配4G到这个主机”和“我不想让主机使用4G”。

除此之外,是什么让你认为放弃这些caching使得pipe理程序在地图上放下内存?

在pipe理程序(虚拟主机)上,可能会有需求分页发生 – 这很好,但你认为发生的可能不是。

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

  • 什么是提交
  • 什么是分配

虚拟机启动时,提交到4G的内存。 这是多less,但不一定会实际使用多less。

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

在你的情况下,虚拟机可能(我不知道虚拟机模型,但我会听你的话)承诺4G的内存。 当虚拟机填充页面caching时,它将分配所有的内存,正如你所提到的。 然而,什么不会发生的是,虚拟机释放在虚拟机上删除caching时分配的内存。

所以通过刷新页面caching,虽然看起来内存在虚拟机上是空闲的,但内存仍然被分配并用于pipe理程序。

因此,在主机笔记本电脑上没有任何内存,实际上你只是浪费了,因为什么内存可以用来防止虚拟机中的I / O查找不再可用。