Keycloak JVM 選項

本文檔涵蓋有關調整 Keycloak 效能的 JVM 選項資訊。

為什麼 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,以便進行堆積分析。