Plate-forme d’automatisation Dell : Conteneurs Java « OOMKilled » à partir du noyau 6.12
Summary: Les applications conteneurisées basées sur Java (telles que Keycloak) peuvent subir un arrêt inattendu en raison d’erreurs de mémoire insuffisante (OOM) lorsqu’elles sont exécutées sur le noyau Linux 6.12 ou une version ultérieure. Ce problème provient de modifications apportées à la façon dont le noyau expose les limites de mémoire « cgroup ». Ces modifications affectent la capacité de la machine virtuelle Java (JVM) à détecter et à respecter correctement les contraintes de mémoire des conteneurs. ...
Symptoms
Pour NativeEdge Dell Automation Platform, keycloak c’est de plus en plus OOMKilled lors de l’initialisation. Par exemple, cela peut se produire lors de l’installation de Helm, lorsque le keycloak Pod bientôt disponible.
Logs à l’intérieur de keycloak Terminez par :
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.
La description du conteneur présente les éléments suivants :
State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: OOMKilled
Pour les autres environnements, il peut s’agir de :
- Le système arrête les conteneurs Java (par exemple,
keycloak, Kafka, Elasticsearch) avec un attributOOMKilledstatut. - La machine virtuelle Java signale des estimations inattendues de la taille du segment de mémoire, qui correspondent souvent à la mémoire hôte plutôt qu’aux limites du conteneur.
- Balises de réglage de la mémoire telles que
-XX:MaxRAMPercentagesemblent inefficaces. - Les journaux peuvent afficher des messages tels que :
[debug][os,container] controller memory is not enabled[debug][os,container] One or more required controllers disabled at kernel level
Cause
cgroup Informations relatives au contrôleur par /proc/cgroups, sur lequel la JVM s’appuyait auparavant pour détecter les limites de mémoire des conteneurs. Cette modification rompt la détection des conteneurs dans les versions JVM concernées, ce qui suppose qu’ils ont accès à la mémoire hôte complète. Par conséquent, la JVM alloue plus de mémoire que le conteneur ne le permet, ce qui déclenche le OOMkiller.
Il y a plusieurs problèmes pour cela dans les projets open-source :
Ubuntu 24.04.3 n’utilise pas le noyau 6.12 par défaut. Mais certaines images sont déjà mises à jour avec les versions 6.12, 6.13 ou 6.14 (par exemple, dans la bibliothèque d’images AWS).
Resolution
Il existe deux solutions de contournement rapide possibles.
- Augmentez temporairement les limites de mémoire du conteneur. Par exemple, voici les étapes à suivre pour procéder à l’installation de Dell Automation Platform, en doublant la limite de mémoire pour le
keycloakconteneur.
dapo est l’espace de nommage Orchestrator par défaut :
kubectl edit sts keycloak -n dapo
keycloak consomme beaucoup de mémoire lors de l’étape de préparation. Cette augmentation nous a permis de passer cette étape d’initialisation.
- Définition explicite des limites de mémoire JVM
Utilisez les indicateurs de démarrage pour restreindre manuellement l’utilisation de la mémoire :
extraEnvVars:
- name: JAVA_OPTS_KC_HEAP
value: "-XX:MaxRAMPercentage=70 -XX:MinRAMPercentage=70 -XX:InitialRAMPercentage=50 -XX:MaxRAM=1G"