Ada*_*hes 10 java heap-memory kubernetes
为什么要在 kubernetes 应用程序中进行设置-Xmx呢-Xms?
我们继承了一个存在内存不足错误的 kubernetes 应用程序。看起来最初的开发人员设置了 kubernetes 资源限制(0.95 CPU 核心和 4Gb 内存),如下所示。然而,他们还将最大堆大小设置JAVA_OPTS -Xmx为 800mb。
我找到了很多关于最佳设置的好材料-Xmx(例如这个),但找不到以下问题的直接答案:我们真的需要在 kubernetes 容器中设置-Xmx(不太重要的是)吗?-Xms我们已经对容器设置了硬性限制
resources,那么设置这些标志有什么意义呢?如果我们把它们全部删除,结果会是什么?应用程序 GC 会更频繁吗?它会动态缩放堆大小还是将堆大小最大值固定为某个默认最大值(例如 256MB)?有没有-Xmx与 kubernets 容器成比例设置的经验法则?
如果您没有设置最大堆大小,则行为取决于所使用的 java 版本。当前的 JRE 支持确定容器限制并使用它来指导其内部启发式方法。
当使用旧版本运行时,用于堆的内存将根据容器可见的物理内存确定,这可能会过多。
请注意,达到容器的内存限制将导致终止进程并重新启动容器。
我建议您对 Xmx 和 Xms 使用根据操作测试确定的合理值,以获得稳定的内存使用情况。
| 归档时间: |
|
| 查看次数: |
10324 次 |
| 最近记录: |