À trois heures du matin, notre service d'authentification principal a cessé de répondre, déclenchant une cascade d'alertes PagerDuty. Contrairement aux idées reçues, le problème ne venait pas d'une surcharge de trafic, mais d'une mauvaise interprétation des ressources limites par la JVM au sein de notre conteneur Docker.
La divergence entre Docker et la JVM
Par défaut, les anciennes versions de Java ne détectent pas correctement les limites de mémoire imposées par les cgroups de Kubernetes. Le processus s'est étendu au-delà de la mémoire physique allouée au conteneur, forçant le noyau Linux à déclencher l'OOM Killer pour protéger le système hôte.
La configuration de correction immédiate
La résolution a nécessité l'activation des flags d'analyse de conteneur natifs dans la configuration de démarrage de notre application. En alignant précisément les limites Kubernetes avec la configuration du tas de mémoire Java, nous avons éliminé les arrêts brutaux du pod.
