具有JVM的Docker容器的全部内存利用率

时间:2019-03-29 10:38:43

标签: java docker

我们有一个基于Java的微服务应用程序在docker容器中运行。由于服务需要不同的内存设置,因此我们必须指定Docker容器和JVM(-Xmx)的内存限制。

我知道Java从Java 10开始支持容器,但这意味着只有某些选项会考虑容器的资源限制。

我的问题是,有什么设置可以使JVM充分利用容器的可用内存吗?例如,如果容器有1GB,则JVM通过在堆和非堆内存(堆栈,类等)之间最佳地共享此内存来利用此内存。

1 个答案:

答案 0 :(得分:1)

没有魔术标记可以为您调整Java内存的大小。一个微服务的工作负载可能与另一个微服务不同,并且将需要不同的内存配置。

您将必须手动设置-Xms-Xmx和其他参数。如果未设置,则JVM将使用默认值,例如-Xmx将默认设置为可用RAM的25%。

Java 8和Java 9仅具有+XX:+UseContainerSupport,但是since Java 10现在是默认行为。此选项使JVM遵守容器施加的资源限制,但不会自动缩放内存。