3.7. 指定不同的内存设置
红帽构建的 Keycloak 容器,而不是为初始和最大堆大小指定硬编码值,而是使用相对值到容器的总内存。JVM 选项 -XX:MaxRAMPercentage=70
、-XX:InitialRAMPercentage=50
来实现此行为。
-XX:MaxRAMPercentage
选项表示容器内存总量的 70% 的最大堆大小。-XX:InitialRAMPercentage
选项代表容器内存总量的 50% 的初始堆大小。这些值根据红帽构建的 Keycloak 内存管理的更深入分析来选择。
由于堆大小根据容器内存总量动态计算,您应该始终为容器设置内存限值。在以前的版本中,最大堆大小设置为 512 MB,为了接近类似值,您应该将内存限值设置为至少 750 MB。对于较小的生产就绪部署,推荐的内存限值为 2 GB。
通过设置环境变量 JAVA_OPTS_KC_HEAP
来覆盖与堆相关的 JVM 选项。您可以在 kc.sh
或 kc.bat
脚本的源代码中找到 JAVA_OPTS_KC_HEAP
的默认值。
例如,您可以指定环境变量和内存限值,如下所示:
podman run --name mykeycloak -p 8080:8080 -m 1g \ -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=change_me \ -e JAVA_OPTS_KC_HEAP="-XX:MaxHeapFreeRatio=30 -XX:MaxRAMPercentage=65" \ registry.redhat.io/rhbk/keycloak-rhel9:24 \ start-dev
警告
如果没有设置内存限制,则内存消耗会快速增加,因为堆大小可增长总容器内存的 70%。在 JVM 分配内存后,它会与当前红帽构建的 Keycloak GC 设置一起返回到操作系统。