Aller au contenu principal

Lab 2.2 - Analyse de la Gestion Mémoire

Objectifs​

À la fin de ce lab, vous serez capable de:

  • Analyser l'utilisation de la mémoire
  • Comprendre le swap
  • Monitorer la mémoire par processus
  • Identifier les fuites mémoire
  • Optimiser l'utilisation mémoire

Prérequis​

  • Système Linux fonctionnel
  • Accès root ou sudo
  • Terminal ouvert

Exercice 1: Informations Mémoire de Base​

Étape 1: Vue d'Ensemble​

# Informations mémoire complètes
free -h

# Informations détaillées
cat /proc/meminfo

# Vue simple
free

Question: Combien de RAM avez-vous? Combien est utilisé?

Étape 2: Analyse Détaillée​

# Voir toutes les informations
cat /proc/meminfo | head -20

# Mémoire totale
grep MemTotal /proc/meminfo

# Mémoire libre
grep MemFree /proc/meminfo

# Mémoire disponible (différent de libre)
grep MemAvailable /proc/meminfo

Explication:

  • MemTotal: RAM totale
  • MemFree: RAM complètement libre
  • MemAvailable: RAM disponible pour nouveaux processus (inclut cache récupérable)

Exercice 2: Swap​

Étape 1: Informations Swap​

# Voir le swap
swapon --show

# Détails du swap
cat /proc/swaps

# Utilisation swap
free -h | grep Swap

Étape 2: Créer un Fichier Swap (Optionnel)​

# Créer un fichier de 1GB pour swap
sudo fallocate -l 1G /swapfile

# Permissions sécurisées
sudo chmod 600 /swapfile

# Formater en swap
sudo mkswap /swapfile

# Activer
sudo swapon /swapfile

# Vérifier
swapon --show

Étape 3: Swap Permanent​

# Ajouter au /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# Vérifier
cat /etc/fstab | grep swap

Exercice 3: Mémoire par Processus​

Étape 1: Top Consommateurs​

# Top 10 processus par mémoire
ps aux --sort=-%mem | head -11

# Avec détails
ps aux --sort=-%mem -o pid,user,%mem,%cpu,cmd | head -11

Étape 2: Mémoire d'un Processus Spécifique​

# Trouver un processus (ex: firefox)
ps aux | grep firefox

# Voir la mémoire d'un PID
cat /proc/<PID>/status | grep -E 'VmSize|VmRSS|VmData'

# Ou avec pmap
pmap <PID>

Explication:

  • VmSize: Taille virtuelle totale
  • VmRSS: RAM physique utilisée
  • VmData: Mémoire de données

Étape 3: Script d'Analyse​

# Créer un script
cat > mem-analysis.sh << 'EOF'
#!/bin/bash
echo "=== Top 5 Processus Mémoire ==="
ps aux --sort=-%mem | head -6
echo
echo "=== Utilisation Mémoire ==="
free -h
echo
echo "=== Swap ==="
swapon --show
EOF

chmod +x mem-analysis.sh
./mem-analysis.sh

Exercice 4: Monitoring en Temps Réel​

Étape 1: vmstat​

# Statistiques toutes les secondes
vmstat 1

# 10 échantillons
vmstat 1 10

# Interpréter les colonnes:
# - swpd: Swap utilisé
# - free: Mémoire libre
# - buff: Buffer cache
# - cache: Page cache
# - si/so: Swap in/out

Étape 2: sar (si installé)​

# Installer sysstat
sudo apt install sysstat

# Statistiques mémoire
sar -r 1 10

# Historique
sar -r

Étape 3: Script de Monitoring​

# Monitoring continu
watch -n 1 'free -h && echo && ps aux --sort=-%mem | head -6'

Exercice 5: Détection de Fuites Mémoire​

Étape 1: Surveillance Continue​

# Créer un script de surveillance
cat > mem-watch.sh << 'EOF'
#!/bin/bash
while true; do
clear
echo "=== $(date) ==="
free -h
echo
echo "=== Top 5 Mémoire ==="
ps aux --sort=-%mem | head -6
sleep 2
done
EOF

chmod +x mem-watch.sh
# Lancer: ./mem-watch.sh

Étape 2: Analyse d'un Processus​

# Suivre l'évolution mémoire d'un processus
watch -n 1 'ps -p <PID> -o pid,%mem,%cpu,rss,vsz,cmd'

Étape 3: Alertes​

# Script d'alerte si mémoire > 80%
cat > mem-alert.sh << 'EOF'
#!/bin/bash
THRESHOLD=80
MEM_USED=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
if [ "$MEM_USED" -gt "$THRESHOLD" ]; then
echo "ALERTE: Mémoire à ${MEM_USED}%"
ps aux --sort=-%mem | head -6
fi
EOF

chmod +x mem-alert.sh
./mem-alert.sh

Exercice 6: Optimisation Mémoire​

Étape 1: Nettoyer le Cache (Attention!)​

# Voir le cache
free -h

# Vider le cache (si vraiment nécessaire)
# ATTENTION: Peut ralentir le système temporairement
sudo sync
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

# Vérifier
free -h

Étape 2: Ajuster Swappiness​

# Voir swappiness actuel
cat /proc/sys/vm/swappiness

# Changer temporairement (0-100, plus bas = moins swap)
sudo sysctl vm.swappiness=10

# Permanent: /etc/sysctl.conf
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

Étape 3: Limites Mémoire​

# Voir les limites d'un processus
cat /proc/<PID>/limits | grep memory

# Limiter avec systemd
systemd-run --slice=my-slice --property=MemoryLimit=512M commande

Vérification​

Checklist​

Vérifiez que vous pouvez:

  • Voir l'utilisation mémoire totale et disponible
  • Analyser le swap
  • Identifier les processus consommant le plus de mémoire
  • Monitorer la mémoire en temps réel
  • Détecter des problèmes mémoire
  • Ajuster les paramètres mémoire

Questions de Réflexion​

  1. Quelle est la différence entre MemFree et MemAvailable?

    • MemFree: Mémoire complètement libre
    • MemAvailable: Mémoire disponible (inclut cache récupérable)
  2. Quand le swap est-il utilisé?

    • Quand la RAM physique est saturée
    • Le kernel déplace les pages inactives vers le swap
  3. Pourquoi vider le cache peut être dangereux?

    • Le cache améliore les performances
    • Le vider peut ralentir temporairement le système

Prochaines Étapes​

  • Lab 2.3: Monitoring Système Avancé
  • Chapitre 2.4: Système de Fichiers Virtuel (VFS)
  • Chapitre 2.5: Gestion des Processus

Lab créé le: Décembre 2024