我们有一个基于Java的微服务应用程序在docker容器中运行。由于服务需要不同的内存设置,因此我们必须指定Docker容器和JVM(-Xmx
)的内存限制。
我知道Java从Java 10开始支持容器,但这意味着只有某些选项会考虑容器的资源限制。
我的问题是,有什么设置可以使JVM充分利用容器的可用内存吗?例如,如果容器有1GB,则JVM通过在堆和非堆内存(堆栈,类等)之间最佳地共享此内存来利用此内存。
答案 0 :(得分:1)
没有魔术标记可以为您调整Java内存的大小。一个微服务的工作负载可能与另一个微服务不同,并且将需要不同的内存配置。
您将必须手动设置-Xms
,-Xmx
和其他参数。如果未设置,则JVM将使用默认值,例如-Xmx
将默认设置为可用RAM的25%。
Java 8和Java 9仅具有+XX:+UseContainerSupport
,但是since Java 10现在是默认行为。此选项使JVM遵守容器施加的资源限制,但不会自动缩放内存。