做java标志Xms和Xmx覆盖标志XX:+ UseCGroupMemoryLimitForHeap?

Dim*_*ios 6 java flags containers docker kubernetes

我正在Kubernetes中运行一个容器化的java应用程序.

为了根据容器规范制作jvm保留存储器,-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap必须设置标志.

如果这两个标志都与Xms和Xmx标志一起设置,那么jvm的行为是什么?一面旗帜会覆盖另一面吗?

例如,如果我们java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Xms -Xms2500M -Xmx2500M -jar myjar.jar 在容器中有容量限制4Gi用于请求而4Gi用于响应,则在具有128Gi内存的主机中,JVM会保留多少内存?

Chr*_*ris 9

-Xmx 标志覆盖 -XX:+UseCGroupMemoryLimitForHeap 标志。

标志 -XX:+UseCGroupMemoryLimitForHeap 让 JVM 检测容器中的最大堆大小应该是多少。

-Xmx 标志将最大堆大小设置为固定大小。

为了回答您的示例,JVM 将保留 2500M 堆空间。非堆和 jvm 的东西会有一些额外的内存使用。

要进一步调整容器中的内存使用情况,您可以使用 -XX:MaxRAMFraction 标志。见这篇文章:https : //blog.csanchez.org/2017/05/31/running-a-jvm-in-a-container-without-getting-killed/