因此,我在一组服务器上运行了一组客户机,目前我的“标准”客户机分区如下:
- 1GB 用于 /boot
- 4 - 8 GB 用于交换
- 其余为 /
我为每个客户机分配了不同数量的 RAM,具体取决于其中运行的应用程序的需求。交换也取决于应用程序。
当某些操作超出其设计范围并使用了更多的 RAM 时,就会进行交换。
但是,这对我来说似乎很浪费:我为每个客户机使用 4 - 8GB 的磁盘空间,只是因为它每天可能需要几次?考虑到这些客户机通常有 20GB,主要托管代码(数据库服务器是分开的),这是一个相当大的比例。
我刚刚在各种堆栈交换网站上阅读了有关此问题的帖子,但没有找到任何更优雅的解决方案。我所说的“优雅解决方案”是指客户端之间共享某种交换空间。
我看到的建议方法是:
- 在客户机中使用交换
- 过度承诺主机
或者,已经起作用的最佳方法(但并不经常被提及)似乎是内存膨胀(仅适用于 Linux 客户机,但没问题),使用某种可以根据需求分配 RAM 的实时监视器/调整代理。
那么,利用这些时间的最佳方法是什么?
答案1
我建议让事情尽可能简单:内存管理本身就是一个复杂的话题,你最不希望看到的就是由于过早/不必要的优化而导致客户崩溃。
对于小型客户机,2 GB 的交换空间是一个合理的起点,对于大型客户机,4/8 GB 就足够了。您可以使用精简卷进行交换,但在这些小尺寸的情况下,这应该没有太大影响。
答案2
删除客户机内的分页空间。将客户机内存分配给不是过度使用主机内存。如有必要,获取更多内存
可选地,启用内核同页合并(KSM)进行一些重复数据删除。
分页空间应该很便宜,但比 DRAM 慢 100 倍是合理的。在我看来,如果它既昂贵又慢,而且需要一些精简配置方案才能获得足够的空间,那么它就不值得保留。
过度使用是有风险的,因为如果使用量超出预期,性能就会很糟糕。或者更糟的是,惹恼 OOM 杀手。通过监控使用情况,您可以在 OOM 之前采取行动,但您是否愿意花费精力来节省一点 DRAM 成本?