简述;
在 Kubernetes 应用中为什么要设置 -Xmx
和 -Xms
?
我们接手了一个 Kubernetes 应用程序,出现了内存不足的错误。看起来最初的开发人员设置了 Kubernetes 资源限制(0.95 CPU 核心和 4GB 内存),如下所示。然而,他们还在
JAVA_OPTS -Xmx
中设置了最大堆大小为 800MB。
我找到了很多关于-Xmx
的最佳设置的好资料(例如this one),但是找不到以下问题的直接答案:我们是否真的需要在kubernetes容器中设置-Xmx
(以及次要的-Xms
)?我们已经在容器的resources
上设置了硬限制,那么设置这些标志的意义是什么?如果完全删除它们,后果会是什么?应用程序是否会更频繁地进行GC?它是否会动态扩展堆大小,还是堆大小将固定在某个默认最大值(如256MB)?在比例上设置-Xmx
有什么经验法则吗?