【问题标题】:JVM Dynamic Memory Allocation in Docker container with UseCGroupMemoryLimitForHeap option带有 UseCGroupMemoryLimitForHeap 选项的 Docker 容器中的 JVM 动态内存分配
【发布时间】:2018-01-04 13:34:57
【问题描述】:

我在 docker 容器中运行 JVM。我为具有硬编码值的容器设置了内存限制。我使用新的-XX:UseCGroupMemoryLimitForHeap JVM 选项。在这种情况下,JVM 应该根据容器内存分配堆内存。

在某种程度上,JVM 确实做到了。如果您提供 500Mb 的容器内存,JVM 会按预期分配 444.5 MB 内存。

但随后 JVM 卡在 1.74 Gb 的堆内存上。即使给定 8Gb 的容器内存,JVM 仍然分配 1.74 Gb 的堆内存。

我可以使用-Xmx 选项分配 4Gb 的堆内存。

如何让 JVM 分配尽可能多的内存?

【问题讨论】:

  • 你能贴出你正在使用的所有 jvm 标志吗?
  • -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 但我解决了这个问题。实际上没有问题。这些标志按预期工作,并且 JVM 分配尽可能多的内存。问题是我的 docker 内存限制。

标签: docker memory-management jvm


【解决方案1】:

任何人都有同样的问题,

这是本地 docker 内存限制。我的 docker 被允许使用最大 2Gb 的内存,因此 JVM 无法分配超过 1.74Gb 的内存。

我增加了 docker 可以使用的内存,现在,JVM 为 4Gb 的容器内存分配了 3.43Gb 的堆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2016-10-10
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多