Plataforma de automação da Dell: Contêineres baseados em Java "OOMKilled" a partir do Kernel 6.12
Summary: Aplicativos conteinerizados baseados em Java (como Keycloak) podem sofrer encerramento inesperado devido a erros de falta de memória (OOM) ao executar no Linux Kernel 6.12 ou posterior. Esse problema decorre de alterações na forma como o kernel expõe os limites de memória "cgroup". Essas alterações afetam a capacidade da Java Virtual Machine (JVM) de detectar e respeitar corretamente as restrições de memória do contêiner. ...
Symptoms
Para o NativeEdge Dell Automation Platform 1.0, keycloak está ficando OOMKilled durante a inicialização. Por exemplo, isso pode acontecer durante a instalação do módulo, quando o keycloak pod está chegando.
Registros dentro do keycloak Termine com:
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.
A descrição do contêiner mostra:
State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: OOMKilled
Para outros ambientes, pode ser:
- O sistema encerra contêineres Java (por exemplo,
keycloak, Kafka, Elasticsearch) com umOOMKilledStatus. - A JVM relata estimativas inesperadamente altas de tamanho de heap, muitas vezes correspondendo aos limites de memória do host em vez de contêiner.
- Sinalizadores de ajuste de memória como
-XX:MaxRAMPercentageparecem ineficazes. - Os registros podem mostrar mensagens como:
[debug][os,container] controller memory is not enabled[debug][os,container] One or more required controllers disabled at kernel level
Cause
cgroup Informações do controlador por /proc/cgroups, no qual a JVM contava anteriormente para detectar limites de memória do contêiner. Essa alteração interrompe o reconhecimento de contêineres nas versões afetadas da JVM, fazendo com que eles presponham que têm acesso à memória completa do host. Como resultado, a JVM aloca mais memória do que o contêiner permite, acionando as OOMkiller.
Há vários problemas para isso em projetos de código aberto:
O Ubuntu 24.04.3 não usa o kernel 6.12 por padrão. Mas algumas imagens já foram atualizadas com as versões 6.12, 6.13 e 6.14 (por exemplo, na biblioteca de imagens da AWS).
Resolution
Esse problema foi resolvido com a Dell Automated Platform 1.1 e versões posteriores
Se o problema for encontrado na Dell Automated Platform 1.0, há duas soluções temporárias rápidas possíveis.
- Aumente temporariamente os limites de memória do contêiner. Por exemplo, estas são as etapas para prosseguir com a instalação da Dell Automation Platform, dobrando o limite de memória para o
keycloakRecipiente.
dapo é o namespace padrão do orquestrador:
kubectl edit sts keycloak -n dapo
keycloak Consome muita memória na etapa de preparação. Esse aumento nos permitiu passar essa etapa de inicialização.
- Limites de memória JVM explicitamente definidos
Use indicadores de inicialização para restringir manualmente o uso da memória:
extraEnvVars:
- name: JAVA_OPTS_KC_HEAP
value: "-XX:MaxRAMPercentage=70 -XX:MinRAMPercentage=70 -XX:InitialRAMPercentage=50 -XX:MaxRAM=1G"