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