我理解设置CPU请求小于限制的用例 – 如果实例具有空闲CPU,则允许每个容器中的CPU突发,从而导致最大CPU利用率.
但是,我无法真正找到与内存相同的用例.大多数应用程序在分配后不释放内存,因此应用程序将有效地请求“限制”内存(这与设置request = limit具有相同的效果).唯一的例外是在已分配了所有内存的实例上运行的容器.我没有真正看到这方面的任何优点,缺点是更难以监控的不确定行为(一个容器由于重GC而具有比另一个容器更高的延迟).
只有我能想到的用例是内存缓存中的阴影,你想要允许内存使用量的峰值.但即使在这种情况下,也会冒一个节点表现不佳的风险. 最佳答案 也许不是一个真正的答案,而是关于这个主题的观点.
与CPU和内存限制的差异是达到限制时发生的情况.在CPU的情况下,容器继续运行但CPU使用率有限.如果达到内存限制,容器将被终止并重新启动.
在我的用例中,我经常将内存请求设置为应用程序平均使用的内存量,限制为25%.这允许我在大多数时间避免容器被杀(这很好),但当然它让我暴露于内存分配(这可能是你提到的问题).