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。