我们有一个基于 Java 的微服务应用程序在 docker 容器中运行。由于服务需要不同的内存设置,因此我们必须指定 Docker 容器和 JVM 的内存限制 (-Xmx
)。
我知道 Java 从 Java 10 开始就支持容器,但这意味着只有某些选项会考虑容器的资源限制。
我的问题是有什么设置可以让JVM充分利用容器的可用内存吗?例如,如果容器有 1GB,那么 JVM 通过在其堆和非堆内存(堆栈、类等)之间最佳地共享此内存来利用它。
最佳答案
没有神奇的标志可以为您调整 Java 内存的大小。一个微服务的工作负载可能与另一个微服务不同,并且需要不同的内存配置。
您必须手动设置 -Xms
、-Xmx
和其他参数。如果未设置,JVM 将使用默认值,例如-Xmx
将默认为可用 RAM 的 25%。
Java 8 和 9 仅具有 +XX:+UseContainerSupport
,但 since Java 10现在这是默认行为。此选项使 JVM 尊重容器施加的资源限制,但不会自动扩展内存。
关于java - 具有 JVM 的 docker 容器的完整内存利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55415580/