当使用带有CGroups实验标记的`openjdk:11`或`openjdk:8`时,仍然需要`-Xmx`。

时间:2019-03-08 03:08:33

标签: 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,我看到一个OOM杀手er,当我输入free -h

时,有很多可用的内存(超过1GB)

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

1 个答案:

答案 0 :(得分:0)

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

当创建的对象/实例多于可用堆大小时,发生

内存不足(OOM)错误。上面的两个参数 limit 堆大小...因此,如果创建更多,仍然会出现OOM错误。

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

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