java - java 标志 Xms 和 Xmx 是否覆盖标志 XX :+UseCGroupMemoryLimitForHeap?

标签 java docker kubernetes containers flags

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

为了让jvm根据容器规范预留内存,-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap标志必须设置。

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

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

最佳答案

-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/

关于java - java 标志 Xms 和 Xmx 是否覆盖标志 XX :+UseCGroupMemoryLimitForHeap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52555036/

相关文章:

kubernetes - 无法正确创建部署

java - 实时数据库中错误情况的处理方法 "firebase"

python - 在 Windows 上为 docker 容器安装 SSL CA 证书

docker - 用于链接dockerfile的Docker选项

azure - 使用哪一个? microsoft/azure-cli 与 mcr.microsoft.com/azure-cli

kubernetes - 无法在Bare Metal上公开Kubernetes服务 “Localhost”

kubernetes - 是否可以加入两个独立的 kubernetes 集群?

java - 子类测试中的 JUnit4 NullPointerException,重写方法

java - 无法在 Java 中使用 System.out

java - 获取 ANDROID_ID 试图了解 java