Dell 自動化平台:Java 型容器從 Kernel 6.12 開始「OOMKilled」

概要: 在 Linux 核心 6.12 或更新版本上執行時,Java 型容器化應用程式 (例如 Keycloak) 可能會因記憶體不足 (OOM) 錯誤而意外終止。此問題源於內核公開「cgroup」記憶體限制的方式的更改。 這些更改會影響 Java 虛擬機 (JVM) 正確檢測和遵守容器記憶體約束的能力。

この記事は次に適用されます: この記事は次には適用されません: この記事は、特定の製品に関連付けられていません。 すべての製品パージョンがこの記事に記載されているわけではありません。

現象

針對 NativeEdge Dell 自動化平台 1.0, keycloak 正在得到 OOMKilled 在初始化期間。例如,在掌舵安裝期間,當 keycloak 豆莢即將出現。

記錄內部 keycloak 結尾為:

Appending additional Java properties to JAVA_OPTS
Changes detected in configuration. Updating the server image.
Updating the configuration and installing your custom providers, if any. Please wait.

容器的說明顯示:

State: Waiting
  Reason: CrashLoopBackOff
Last State: Terminated
  Reason: OOMKilled

對於其他環境,可能是:

  • 系統終止 Java 容器(例如, keycloak,Kafka,Elasticsearch)與 OOMKilled 狀態。
  • JVM 報告異常高的堆大小估計值,通常與主機記憶體而不是容器限制匹配。
  • 記憶體調整標誌,例如 -XX:MaxRAMPercentage 顯得無效。
  • 記錄可能會顯示以下訊息:
    • [debug][os,container] controller memory is not enabled
    • [debug][os,container] One or more required controllers disabled at kernel level

原因

從 Linux 內核 6.12 開始,內核不再公開 cgroup 控制器資訊由 /proc/cgroups,JVM 以前依賴它來檢測容器記憶體限制。此更改會破壞受影響 JVM 版本中的容器感知,導致它們假定它們可以訪問完整的主機記憶體。因此,JVM 分配的記憶體多於容器允許的記憶體,從而觸發內核的 OOMkiller

這在開源專案中有幾個問題:

Ubuntu 24.04.3 預設不使用 6.12 核心。但某些映像已更新為 6.12、6.13、6.14 版本(例如,在 AWS 映像庫中)。

解決方法

此問題已從 Dell 自動化平台 1.1 及更新版本解決

如果在 Dell 自動化平台 1.0 上遇到此問題,有兩種可能的快速因應措施。

  • 暫時增加容器的記憶體限制。例如,以下是繼續安裝 Dell 自動化平台的步驟,將 keycloak 容器。
為此,必須運行以下命令(檢查業務流程協調程式命名空間,例如,如下所示 dapo 是預設業務流程協調程式命名空間:
kubectl edit sts keycloak -n dapo
找到記憶體限制和請求,並將其加倍。 keycloak 在準備步驟中消耗大量記憶體。此增加使我們能夠通過此初始化步驟。
  • 顯式設定 JVM 記憶體限制

使用啟動標誌手動限制記憶體使用量:

extraEnvVars:
  - name: JAVA_OPTS_KC_HEAP
    value: "-XX:MaxRAMPercentage=70 -XX:MinRAMPercentage=70 -XX:InitialRAMPercentage=50 -XX:MaxRAM=1G"

対象製品

Dell Automation Platform, NativeEdge Solutions, Dell Automation Platform Components, NativeEdge
文書のプロパティ
文書番号: 000369678
文書の種類: Solution
最終更新: 23 5月 2026
バージョン:  4
質問に対する他のDellユーザーからの回答を見つける
サポート サービス
お使いのデバイスがサポート サービスの対象かどうかを確認してください。