You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jib构建Quarkus Docker镜像时,如何修改默认GC?

解决Quarkus Jib构建时JVM GC参数重复定义的问题

你在application.yaml中配置quarkus.jib.jvm-additional-arguments: -XX:+UseZGC,-XX:+ZGenerational后触发GC重复定义错误,核心原因是Jib构建的Docker容器默认启动命令已经包含了-XX:+UseParallelGC参数,同时指定两个GC收集器会导致JVM报错。默认启动命令如下:

java -XX:MaxRAMPercentage=80.0 -XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError -Djava.util.logging.manager=org.jboss.logmanager.LogManager -cp . -jar /home/jboss/quarkus-run.jar

下面是两种可行的解决办法:

  • 替换默认JVM参数列表:放弃使用jvm-additional-arguments追加参数,改用quarkus.jib.jvm-arguments直接覆盖整个JVM参数集合。这样可以彻底替换掉默认的GC参数,同时保留其他必要配置。示例配置:

    quarkus:
      jib:
        jvm-arguments: >-
          -XX:MaxRAMPercentage=80.0
          -XX:+UseZGC
          -XX:+ZGenerational
          -XX:MinHeapFreeRatio=10
          -XX:MaxHeapFreeRatio=20
          -XX:GCTimeRatio=4
          -XX:AdaptiveSizePolicyWeight=90
          -XX:+ExitOnOutOfMemoryError
          -Djava.util.logging.manager=org.jboss.logmanager.LogManager
    

    注意要保留Quarkus运行必需的参数(比如日志管理器、OOM退出策略),避免遗漏导致应用异常。

  • 部署时通过环境变量覆盖:不需要修改配置文件,在启动容器时通过JAVA_OPTS环境变量覆盖默认GC参数。命令示例:

    docker run -e JAVA_OPTS="-XX:+UseZGC -XX:+ZGenerational" your-quarkus-image
    

    这种方式适合需要动态调整GC策略的场景。

内容的提问来源于stack exchange,提问作者simonC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 01:35:03