Keycloak JVM 选项

本文档涵盖了有关 JVM 选项的信息,这些选项用于调整 Keycloak 的性能。

为什么 JVM 堆调整与 Keycloak 的性能相关

Keycloak 作为一个基于 Java 的应用程序,依赖 JVM 进行内存管理。适当的堆大小确保应用程序拥有足够的内存来处理其操作,而不会遇到与内存相关的問題。高效的垃圾收集 (GC) 是此过程中的重要因素。如果堆太小,GC 将频繁运行,从而增加 CPU 使用率并可能导致暂停。相反,堆过大可能导致更长的 GC 暂停。通过适当调整堆大小,可以最大程度地减少花费在垃圾收集上的时间,从而提高应用程序的整体吞吐量。

此外,适当的堆调整有助于防止内存不足 (OOM) 错误,有助于提高 Keycloak 的稳定性和可靠性。它还改善了延迟和响应时间,这对身份验证和授权任务至关重要。适当的内存管理使应用程序能够有效地扩展,处理负载增加而不会降低性能。此外,优化的堆设置确保高效地利用资源,既能防止资源利用不足,又能防止资源过度消耗。

设置 JVM 选项

我们可以在部署中设置 JVM 选项,在部署中可以覆盖特定变量(如 JVM_OPTS/JAVA_OPTS_KC_HEAP),并启用特殊标志。请记住,如果您有多个容器/服务器,请确保以一致的方式将配置应用于所有 Keycloak JVM。

我们还可以通过在 Keycloak 服务器节点上运行以下命令来验证配置是否已应用,该命令会打印应用于特定 JVM 的 VM.flags。

jcmd 1 VM.flags

标准 JVM 选项

-XX:MetaspaceSize

设置初始元空间大小。

-XX:MaxMetaspaceSize

设置最大元空间大小。

JAVA_OPTS_KC_HEAP

容器特定工作负载 JVM 堆选项

-XX:MaxRAMPercentage

设置 JVM 可以使用的系统物理内存的最大百分比。

-XX:MinRAMPercentage

设置 JVM 可以使用的系统物理内存的最小百分比。

-XX:InitialRAMPercentage

设置分配给 JVM 的系统物理内存的初始百分比。

非容器特定工作负载 JVM 堆选项

-Xms

设置 JVM 的初始堆大小。

-Xmx

设置 JVM 的最大堆大小。

垃圾收集调整选项

-XX:+UseG1GC

启用 G1 垃圾收集器。

-Xlog:gc:file="path/to/file"

我们可以设置此选项以生成 GC 日志,然后可以收集这些日志以执行 GC 日志分析。

-XX:MaxGCPauseMillis

设置最大 GC 暂停时间的目标。

性能调整选项

-XX:MinHeapFreeRatio

设置在扩展堆之前要维护的空闲堆空间的最小百分比。

-XX:MaxHeapFreeRatio

设置在缩小堆之前要维护的空闲堆空间的最大百分比。

-XX:GCTimeRatio

设置垃圾收集时间与应用程序时间的理想比率。

-XX:AdaptiveSizePolicyWeight

调整 JVM 中自适应大小策略决策的权重。

-XX:ConcGCThreads

指定用于并发垃圾收集的线程数量。

-XX:CICompilerCount

设置用于即时 (JIT) 编译的编译器线程数。

用于分析的额外 JVM 选项

-XX:+ExitOnOutOfMemoryError

在出现 OutOfMemoryError 时退出。

-XX:FlightRecorderOptions=stackdepth=512

设置 Java Flight Recorder 深度配置,以便可以记录用于堆分析的 JFR。