【发布时间】:2026-01-12 20:35:01
【问题描述】:
我正在尝试使用执行器指标信息来调整我们的 pod 的大小。用下面的K8资源配额配置;
resources:
requests:
memory: "512Mi"
limits:
memory: "512Mi"
我们观察到 jvm.memory.max 返回 ~1455 mb。我知道这个值包括堆和非堆。进一步深入研究 api (jvm.memory.max?tag=area:nonheap) 和 (jvm.memory.max?tag=area:heap) 分别得到 ~1325mb 和 ~129mb。
显然,当非堆设置为最大值时,该值大于 K8 限制,容器最终必然会被杀死。但是为什么jvm(非堆内存)不受容器内存配置(K8中配置)的限制?
上述观察结果适用于 java 8 和 java 11。下面的博客讨论了 java 8 的实验选项,其中讨论了 CPU 和堆配置,但没有提及非堆。在调整 pod 大小时需要考虑哪些建议?
-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap
Source
【问题讨论】:
-
你找到答案了吗?寻找相同问题的答案
标签: spring-boot docker kubernetes