Contexte
Dans un environnement Linux, lors d'une opération d'écriture massive de fichiers sur disque avec une configuraton RAID5, une augmentation progressive de l'utilisation mémoire a été observée. Les indicateurs buffer/cache croissaient de manière continue, ce qui a déclenché une investigation technique détaillée pour identifier la cause sous-jacente.
Vérification du type de RAID
La configuration initialement supposée comme RAID matériel s'est avérée être un RAID logiciel, comme indiqué par plusieurs signes :
- Les noms des disques md124 et md126 sont typiques des RAID logiciels sur Linux.
- La commande
lsblka listé les périphériques physiques sda, sdb, sdc, sdd. - La consultation de
/proc/mdstata révélé les détails des disques RAID actifs. - L'utilisation de
lshw | grep -i raida uniquement montré un contrôleur RAID basé sur CPU, confirmant l'absence de RAID matériel.
Diagnostic des fuites mémoire
Des outils de profiling ont été employés pour éliminer les fuites mémoire potentielles :
Avec valgrind
# Installation de l'outil de diagnostic
apt install valgrind
# Lancement de la vérification des fuites mémoire
valgrind --tool=memcheck --leak-check=full --log-file=rapport_memcheck.log ./ProcessusCible
Aucune fuite mémoire n'a été détectée dans le processus analysé.
Appels système via strace
# Surveillance des appels système liés à la mémoire
strace -f -e trace=memory -p $(pgrep ProcessusCible)
Les appels mmap et munmap étaient équilibrés, indiquant une gestion mémoire normale sans anomalies d'allcoation.
Évaluation de la fragmentation et des goulots d'étranglement IO
L'augmentation mémoire correspondait principalement aux buffer/cache, suggérant un possible ralentissement des opérations d'écriture sur disque. Plusieurs méthodes ont été utilisées pour valider cette hypothèse :
Surveillance de la mémoire buffer/cache
# Lancement d'une surveillance périodique en arrière-plan
nohup watch -n 5 "free | grep Mem >> journal_sysmemoire.log" &
# Visualisation des entrées en temps réel
tail -50f journal_sysmemoire.log
Les résultats ont confirmé que l'accroissement mémoire provenait des buffer/cache, indiquant des données mises en attente avant écriture disque.
Analyse des performances IO avec iostat
# Exemple de sortie pour évaluer les performances IO
iostat
L'indicateur iowait a été observé, révélant des temps d'attente pour les opérations d'écriture.
Inspection des pages sales dans /proc/meminfo
# Vérification des pages sales (données modifiées non écrites)
grep Dirty /proc/meminfo
Cette commande permet de quantifier les données en attente d'écriture sur disque.
Cartographie mémoire avec pmap
# Génération d'une cartographie mémoire détaillée du processus
pmap -x $(pgrep ProcessusCible) >> analyse_pmap.log
# Filtrage pour une bibliothèque spécifique
cat analyse_pmap.log | grep libtest.so
pmap fournit une vision granulaire de lu'tilisation mémoire, identifiant les pages sales et la mémoire RSS attribuée à chaque composant, ce qui est essentiel pour diagnostiquer les variations mémoire.