Automatizační platforma Dell: Kontejnery založené na Javě "OOMKilled" počínaje jádrem 6.12
Zusammenfassung: Kontejnerizované aplikace založené na jazyce Java (například Keycloak) mohou při spuštění v jádře Linux Kernel 6.12 nebo novějším zaznamenat neočekávané ukončení kvůli chybám OOM (nedostatek paměti). Tento problém pramení ze změn v tom, jak jádro zveřejňuje limity paměti "cgroup". Tyto změny mají vliv na schopnost prostředí Java Virtual Machine (JVM) správně detekovat a respektovat omezení paměti kontejneru. ...
Symptome
V případě platformy Dell Automation Platform 1.0 NativeEdge keycloak je stále více OOMKilled během inicializace. Může k tomu dojít například během instalace kormidla, kdy keycloak Pod se blíží.
Protokoly uvnitř keycloak Ukončit:
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.
Popis kontejneru zobrazuje:
State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: OOMKilled
V jiných prostředích to může být:
- Systém ukončí kontejnery Java (například
keycloak, Kafka, Elasticsearch) sOOMKilledStav. - Prostředí JVM hlásí neočekávaně vysoké odhady velikosti haldy, které často odpovídají paměti hostitele, nikoli limitům kontejnerů.
- Příznaky ladění paměti jako
-XX:MaxRAMPercentagese jeví jako neúčinné. - V protokolech se mohou zobrazovat zprávy jako:
[debug][os,container] controller memory is not enabled[debug][os,container] One or more required controllers disabled at kernel level
Ursache
cgroup Informace o řadiči podle /proc/cgroups, na který se JVM dříve spoléhal při zjišťování limitů paměti kontejneru. Tato změna přeruší rozpoznávání kontejnerů v ovlivněných verzích prostředí JVM, což způsobí, že budou předpokládat, že mají přístup k úplné paměti hostitele. V důsledku toho JVM přiděluje více paměti, než umožňuje kontejner, a aktivuje tak proces jádra OOMkiller.
V opensourcových projektech existuje několik problémů:
Systém Ubuntu 24.04.3 ve výchozím nastavení nepoužívá jádro 6.12. Některé image jsou ale aktualizované už na verze 6.12, 6.13, 6.14 (například v knihovně imagí AWS).
Lösung
Tento problém je vyřešen z platformy Dell Automated Platform 1.1 a novější
Pokud k problému dochází v automatizované platformě Dell 1.0, existují dvě možná rychlá zástupná řešení.
- Dočasně zvyšte limity paměti pro kontejner. Zde jsou například kroky, jak pokračovat v instalaci automatizační platformy Dell Automation Platform, která zdvojnásobí limit paměti pro
keycloakKontejner.
dapo je výchozí obor názvů nástroje Orchestrator:
kubectl edit sts keycloak -n dapo
keycloak V přípravném kroku spotřebovává velké množství paměti. Toto zvýšení nám umožnilo projít tímto inicializačním krokem.
- Explicitní nastavení limitů paměti JVM
K ručnímu omezení využití paměti použijte příznaky při spuštění:
extraEnvVars:
- name: JAVA_OPTS_KC_HEAP
value: "-XX:MaxRAMPercentage=70 -XX:MinRAMPercentage=70 -XX:InitialRAMPercentage=50 -XX:MaxRAM=1G"