spring-boot - 使用 Actuator 指标调整 Pod 大小 jvm.memory.max

标签 spring-boot docker kubernetes

我正在尝试使用执行器指标信息来调整 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 分别。

显然,如果非堆设置为 max out 的值大于 K8 限制,容器最终肯定会被杀死。但为什么jvm(非堆内存)不受容器内存配置(K8中配置)的限制?

上述观察结果对于 java 8 和 java 11 是有效的。下面的博客讨论了 java 8 的实验选项,其中讨论了 CPU 和堆配置,但没有提及非堆。在调整 Pod 大小时需要考虑哪些建议?

-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap Source

最佳答案

Java 8 有一些标志可以帮助运行时以更加容器感知的方式运行:

java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -jar app.jar

如果将最大容器内存限制设置为 512 MB,为什么您获得的最大 JVM 堆内存为 129 MB?所以答案是,JVM中的内存消耗包括堆内存和非堆内存。类元数据、JIT 编译代码、线程堆栈、GC 和其他进程所需的内存均取自非堆内存。因此,基于cgroup资源限制,JVM保留一部分内存用于非堆使用,以保证系统稳定性。 非堆内存的确切数量可能有很大差异,但如果您正在进行资源规划,可以肯定的是,堆约占 JVM 总内存的 80%。因此,如果将设置的最大堆设置为 1000 MB,则可以预期整个 JVM 可能需要大约 1250 MB。

JVM 读取到容器限制为 512M,并创建了一个最大堆大小约为 129MB 的 JVM。恰好是 JDK 人体工程学页面中定义的容器内存的 1/4。

如果您深入研究 JVM Tuning guide您将看到以下内容。

Unless the initial and maximum heap sizes are specified on the command line, they're calculated based on the amount of memory on the machine. The default maximum heap size is one-fourth of the physical memory while the initial heap size is 1/64th of physical memory. The maximum amount of space allocated to the young generation is one third of the total heap size.

您可以找到更多相关信息here .

关于spring-boot - 使用 Actuator 指标调整 Pod 大小 jvm.memory.max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57561611/

相关文章:

java - 自定义 API 响应中的 JSON 属性

kubernetes - 在 Windows 10 家庭版上设置 KUBECTL 时出现问题

docker - 如何使用Docker Dockerfile创建启用PostgreSQL图像的PostGIS

mysql - Maven 使用 java ee 应用程序运行 docker 镜像

docker - 使用 nginx 作为反向代理时连接到上游时连接被拒绝

azure - 使用 azure-sdk-for-python 将节点部署到 AKS 集群

jenkins - 运行时为从代理上运行的每个 jenkins 作业创建 pv/pvc

java - Spring MVC 路径匹配忽略双斜杠//

rest - 是否可以使用 REST 和 httpInvoker 在 Spring Boot 中远程公开 bean

spring-boot - Spring Boot 执行器端点的响应 MIME 类型