构建Quarkus原生应用时出现OOM,设置Xmx12G仍提示内存不足如何解决?
问题原因
你遇到的退出码137本质是构建进程被系统OOM(内存不足)杀手强制终止,你已经正确给native-image进程设置了12G堆内存,但是忽略了Docker容器本身的运行内存上限,这是用容器模式构建Quarkus原生镜像最常见的配置遗漏。
解决方案
- 先调整Docker运行内存配额:
如果你用的是Windows/macOS的Docker Desktop,打开设置→资源面板,将分配给Docker的总内存上调到至少16G,预留足够的运行开销;如果是Linux环境直接运行Docker命令,在执行构建的docker run参数中增加--memory 16g --memory-swap 16g,避免容器超出默认内存限制被宿主机强制终止。 - 修正Xmx参数配置方式:
不要手动修改插件生成的docker run命令中的参数,通过Quarkus官方配置项设置更稳妥,Maven构建时直接追加参数即可:mvn package -Dnative -Dquarkus.native.native-image-xmx=12g,也可以将配置quarkus.native.native-image-xmx=12g写入项目的application.properties文件固化配置。 - 版本优化:
你当前使用的Quarkus 2.2.1.Final配套的GraalVM 21.2版本本身内存占用偏高,可尝试升级Quarkus到2.7以上的稳定版,配套的GraalVM 22.x系列对内存占用做了大量优化,空原生项目构建的内存占用可降到8G以内。 - 临时规避方案:
如果暂时无法调整Docker内存配额,可以关闭容器构建模式,在本地安装对应版本的GraalVM并配置好GRAALVM_HOME环境变量,构建时追加参数-Dquarkus.native.container-build=false,直接用本地环境构建即可避开Docker的内存限制。
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

