Docker OpenJDK -Xmx 或者

3

我正在尝试在容器中运行一个服务,但是当容器中的服务启动时(它执行一些内存密集型操作),遇到了OutOfMemoryError: Java heap space

我尝试添加-Xmx1024 -Xms1024选项,但没有起作用。

我还尝试使用

-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap

正如OpenJDK Docker Hub文档所提到的那样,但是当我运行时,会出现以下错误:

Unrecognized VM option 'UnlockExperimentalVMOptions XX:+UseCGroupMemoryLimitForHeap'

我正在使用的当前Dockerfile如下所示。
FROM openjdk:8u131

...

...

CMD ["java","-XshowSettings:vm -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap","-jar", "target/my-jar.jar"]
2个回答

4

从OpenJDK 10开始,无需任何额外的标志,就能自动检测到cgroup限制(JDK-8146115)。另外,它们还可以通过MaxRAMPercentage选项将最大堆大小指定为该限制的一部分(JDK-8186248)。


2
我认为您在指定参数时有误。应该是这样的:

CMD ["java",
     "-XshowSettings:vm -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap",
     "-jar", "target/my-jar.jar"]

should be:

CMD ["java",
     "-XshowSettings:vm",
     "-XX:+UnlockExperimentalVMOptions",
     "-XX:+UseCGroupMemoryLimitForHeap",
     "-jar", "target/my-jar.jar"]

当你使用 CMD [ ... ] 命令时,需要像 shell 一样提供参数。这也可能是为什么你无法让 -Xmx1024 -Xms1024 生效的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接