java - 当将 `openjdk:11` 或 `openjdk:8` 与 CGroup 的实验标志一起使用时,是否仍需要 `-Xmx`

标签 java docker

根据 https://github.com/docker-library/docs/blob/master/openjdk/README.md#make-jvm-respect-cpu-and-ram-limits

它说JDK11已经默认使用-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap

但是,我仍然收到错误 137,并且当我输入 free -h 时,我看到 OOM killer 并且有大量可用内存(超过 1GB)

是否仍需要 -Xmx 来防止 OOM 错误?

最佳答案

这两个参数适用于 JVM 在容器(如 docker 容器)内运行时的情况。这些参数限制容器内资源(CPU 和内存)的使用。

当您创建的对象/实例多于可用堆大小时,会发生内存不足 (OOM) 错误。上面的两个参数限制堆大小...所以如果你创建更多,你仍然会出现OOM错误。

这两个参数与限制堆大小(最大和最小)的 Xmx 和 Xms 选项无关。请注意,JVM 是 VM 的一种形式,您可以指定(至少在理论上)大于可用内存(容器或主机)的 Xmx。

我希望这能回答您的问题。

关于java - 当将 `openjdk:11` 或 `openjdk:8` 与 CGroup 的实验标志一起使用时,是否仍需要 `-Xmx`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55056165/

相关文章:

java - Android-通过异常解析Json

wordpress - 无法调用容器命令

java - 在 Java 中通过带有命名空间的标签获取 SOAP 元素

java - 无法在 Firebase 上初始化类 FirebaseThreadManagers 错误

java - 获取所选 "li"的文本

docker - Windows上docker的奇怪状态

windows - "tls: oversized record received with length 20527"仅尝试从 Win10 WSL Bash 到 "docker run"

java - 如何在消息框中显示变量的值?

ssl - Docker 容器未连接到 https 端点

r - 将特定版本的 R 添加到 docker 容器