L'application Symfony a souffert d'épuisement de mémoire, provoquant des plantages de conteneurs nocturnes. Le développeur a d'abord suspecté une fuite de mémoire, mais l'analyse a révélé que le problème provenait de requêtes gourmandes en ressources, chacune consommant jusqu'à 512 Mo. Ces requêtes saturaient rapidement le pool de travailleurs PHP-FPM, entraînant l'indisponibilité du site.
Face à l'augmentation du contenu, le développeur a mis en place des outils de surveillance pour identifier les routes problématiques. Il a découvert cinq schémas récurrents dans Doctrine, tous contribuant à la consommation excessive de mémoire. La première cause identifiée était une hydratation complète des entités Doctrine lorsque seules quelques colonnes étaient nécessaires, comme dans le cas de la génération du sitemap.
Cette surconsommation de mémoire a été résolue en optimisant le code pour éviter l'hydratation inutile des entités. Le développeur a instrumenté son application avant de toucher au code, ce qui lui a permis de cibler précisément les problèmes. L'objectif était de réduire la quantité de données chargées et traitées par chaque requête, afin de prévenir l'épuisement de la mémoire.
L'application Symfony a rencontré des problèmes de mémoire dus à des requêtes gourmandes, saturant le pool de workers. Après analyse, cinq schémas récurrents dans Doctrine ont été identifiés comme responsables, notamment une hydratation complète des entités là où seule une partie des données était nécessaire. L'optimisation du code pour réduire la consommation de mémoire par requête a permis de résoudre le problème.
Les workers Symfony utilisant Messenger peuvent planter au bout de plusieurs heures — souvent la nuit — à cause de problèmes invisibles comme des fuites mémoire, des connexions externes instables (Redis, base de données) ou des workers laissés actifs trop longtemps sans redémarrage. L’article explique que ces processus sont conçus pour tourner en continu et accumulent progressivement de la mémoire ou des états incohérents, ce qui finit par provoquer un crash ; il recommande donc de mettre en place des limites de messages ou de temps, des redémarrages automatiques via Supervisor/Systemd et une meilleure gestion des erreurs ou des dépendances externes afin de maintenir des workers stables en production.
Tout est dans le titre
Tout est dans le titre
Tout est dans le titre
Tout est dans le titre
Tout est dans le titre
À découvrir
Petite astuce
Ça peut servir... La commande (à mettre dans une crontab éventuellement) : sync; sudo echo 3 > /proc/sys/vm/drop_caches