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
-
Quelle est la différence entre MemFree et MemAvailable?
- MemFree: Mémoire complètement libre
- MemAvailable: Mémoire disponible (inclut cache récupérable)
-
Quand le swap est-il utilisé?
- Quand la RAM physique est saturée
- Le kernel déplace les pages inactives vers le swap
-
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