5.7. 指定不同的内存设置
红帽构建的 Keycloak 容器,而不是为初始和最大堆大小指定硬编码值,而是对容器的总内存使用相对值。这个行为可通过 JVM options -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 KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=change_me \ -e JAVA_OPTS_KC_HEAP="-XX:MaxHeapFreeRatio=30 -XX:MaxRAMPercentage=65" \ registry.redhat.io/rhbk/keycloak-rhel9:26 \ start-dev
如果没有设置内存限制,则内存消耗会快速增加,因为堆大小可增长到总容器内存的 70%。JVM 分配内存后,会使用当前的 Keycloak GC 设置构建将其返回到操作系统。