Pression mémoire / OOM
La mémoire du serveur s'épuise, le système swappe ou l'OOM killer est actif. Déterminez d'abord qui consomme la mémoire : mémoire allouée (buffer pool/SGA), mémoire de session (work_mem/PGA), l'OS dans son ensemble, ou une situation propre à Redis ?
Qui consomme la mémoire ?
Séparez l'origine de la pression mémoire par couche. La mémoire allouée (fixe) est-elle trop grande, la mémoire par session explose-t-elle, un processus hors base la dévore-t-il, ou la gestion mémoire propre à Redis est-elle en jeu ?
SELECT component, ROUND(current_size/1024/1024) AS mb FROM v$memory_dynamic_components WHERE current_size>0 ORDER BY current_size DESC;- La mémoire allouée (buffer pool / SGA) domine
- La mémoire de session (work_mem / PGA) explose
- Un processus hors base / l'OS dans son ensemble
- Propre à Redis (maxmemory / éviction / fragmentation)
La mémoire totale configurée dépasse-t-elle la RAM physique ?
Si la mémoire allouée fixe est importante, il y a deux possibilités : soit le total configuré (buffer pool + sessions + OS) dépasse la RAM physique (sur-allocation), soit la taille est raisonnable mais le taux de succès du cache reste faible. Additionnez les paramètres et comparez-les à la RAM.
SHOW PARAMETER sga_target; SHOW PARAMETER pga_aggregate_target;
SELECT ROUND(value/1024/1024/1024,1) AS host_ram_gb FROM v$osstat WHERE stat_name='PHYSICAL_MEMORY_BYTES';- Oui, le total configuré dépasse la RAM (sur-allocation)
- Non, la taille est raisonnable mais le taux de succès du cache est faible
Cause racine : sur-allocation de la mémoire
La somme buffer pool/SGA + mémoire de session + besoins de l'OS dépasse la RAM physique. Le système swappe, ou l'OOM killer tue le processus.
Cause racine : cache insuffisant (faible taux de succès du cache)
La mémoire allouée ne dépasse pas la RAM mais est petite par rapport au working set ; le hit ratio du buffer cache est faible et la base lit constamment sur disque.
Cause racine : explosion de la mémoire de session
La mémoire par session comme work_mem/PGA, multipliée par une forte concurrence, épuise la RAM. Chaque opération de sort/hash peut allouer cette mémoire séparément.
Cause racine : gestion de la mémoire Redis
Dans Redis, used_memory a atteint maxmemory, l'éviction est active ou la fragmentation est élevée (used_memory_rss >> used_memory). La politique et la fragmentation doivent être traitées.
Cause racine : consommation mémoire hors base de données
La mémoire n'est pas consommée par la base de données mais par l'OS dans son ensemble ou un processus voisin : une autre application, la pression du cache du système de fichiers ou un processus auxiliaire qui fuit.