如何使用 jib 作为构建引擎来更改 quarkus docker 镜像中的默认 GC?
我尝试过 application.yaml 中的设置,但出现重复的 gc 定义错误,因为使用以下参数将参数写入 JAVA_OPTS env 变量
quarkus.jib.jvm-additional-arguments: -XX:+UseZGC,-XX:+ZGenerational
docker 中的 jvm 命令已经有了这个,默认情况下使用 JIB 就存在
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
您看到这种行为的原因是因为
quarkus-container-image-jib
使用的默认基础映像是 registry.access.redhat.com/ubi8/openjdk...
,它使用 this 脚本来确定 JVM 启动参数。
您可以查看此处以查看您可以设置的影响脚本的所有选项。 影响GC使用的环境变量是
GC_CONTAINER_OPTIONS
,所以你需要做的第一件事是:
quarkus.jib.environment-variables.GC_CONTAINER_OPTIONS=-XX:+UseZGC
如果您还想使用Generational ZGC,您还需要配置
quarkus.jib.jvm-additional-arguments=-XX:+ZGenerational
使用两种不同的语法肯定很笨拙,所以我打开了this问题来改善这种情况。