我正在运行一个Arch Linux主机(安装了32GB内存)和一些虚拟机,我可以根据需要启动/closures(实际上它是一个共享的开发者工具箱,值得)。 我注意到了以下行为:
当VMWare启动并运行时,系统会主动caching虚拟机在RAM中使用的内容。 当虚拟机运行时,主机RAMcaching将膨胀至〜28GB。 客人被限制在4GB,通常运行〜2-3GB。 当主机达到200MB的空闲RAM时,速度会变慢。 在添加交换之前,它会冻结并需要重新启动。 现在,只要我手动释放caching,只要我及时捕捉,就会变得难以忍受。 如果不是,它仍然需要一个硬重启。 没有恐慌,它只是坐在那里,闪烁在我身上。
"free -h"报告总共31GB,使用2.5-4GB,<200MB免费,〜100MB共享,〜28GB缓冲/caching,~28GB可用。 运行"sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"交换free和buff / cache列。
请注意,进程杀手没有被调用(我不明白为什么不是),当内存压力很高时,指向caching的所有内容都应该被释放。 但事实并非如此。 它仍然坐在一个健康的28小时的GB。
我没有安装任何其他应用程序,经常更换RAM,所以我不知道如何testing这个理论,无论是VMWare还是主机本身。 其他的一切都非常稳固或啜饮内存。 甚至火狐浏览器也不会造成这个问题。 有趣的是,清除caching后,主机也变得更快 – 虽然这可能只是我的想象。
就这样说,我的问题是:
有没有办法在每个进程的基础上禁用内存caching?
如果没有,是否有任何方法完全禁用内存caching,意识到这会导致主机放缓?
为什么不在低RAM下调用进程杀手?dmesg/journalctl报告没有问题。
为什么高速caching在高内存压力下被清除?
为什么客人报告使用3GB + 1GB vram时使用"free"报告2GB?
我会说实话,我只是一个开发人员有点卡住了系统pipe理员的angular色。 我真的不知道发生了什么事情。
感谢您的帮助或见解。