Dans cette leçon, tu vas apprendre à diagnostiquer les goulots d'étranglement et à optimiser les performances de ton système Linux. Nous verrons les outils de benchmark, les techniques de tuning système, et les bonnes pratiques pour garder ta machine réactive.
Avant de commencer, installe les paquets nécessaires :
sudo apt update
sudo apt install sysstat stress sysbench tuned -y
# Afficher par utilisation mémoire (tapez M)
top -o %MEM
# Afficher par temps CPU (tapez P)
top -o %CPU
# Statistiques d'utilisation disque (2 secondes, 3 fois)
iostat -x 2 3
# Uniquement le périphérique sda, rapports étendus
iostat -x sda 1 5
# Stats CPU par cœur, intervalle de 1 seconde
mpstat -P ALL 1 3
# Affichage en temps réel toutes les secondes
mpstat 1
# Surveiller les 5 premiers processus par utilisation CPU
pidstat -p $(pgrep -d',' | tr ',' ' ') -u 1 1 | head -20
# Surveiller les E/S disque d'un processus (remplace 1234 par le PID)
pidstat -d 1 1 -p 1234
# Test CPU : calculer les nombres premiers pendant 10 secondes
sysbench cpu --cpu-max-prime=20000 --time=10 run
# Test mémoire : opérations de lecture pendant 10 secondes
sysbench memory --time=10 --memory-block-size=1M --memory-total-size=10G run
# Préparer le fichier de test (2 Go)
sysbench fileio --file-total-size=2G --file-test-mode=rndrw prepare
# Lancer le benchmark lecture/écriture aléatoire
sysbench fileio --file-total-size=2G --file-test-mode=rndrw --time=30 run
# Nettoyer les fichiers de test
sysbench fileio cleanup
sysctl permet de modifier les paramètres du noyau Linux à chaud. Ces paramètres contrôlent la mémoire, le réseau, les fichiersystems et bien plus encore.
# Voir la valeur actuelle d'un paramètre
sysctl net.ipv4.tcp_fin_timeout
# Modifier un paramètre temporairement (jusqu'au prochain reboot)
sudo sysctl -w net.ipv4.tcp_fin_timeout=15
# Créer un fichier de configuration personnalisé
sudo nano /etc/sysctl.d/99-custom.conf
# Contenu du fichier :
# Optimisation réseau
net.ipv4.tcp_fin_timeout = 15
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 2048
# Optimisation mémoire (réduire la swapiness si assez de RAM)
vm.swappiness = 10
vm.dirty_ratio = 15
# Appliquer sans redémarrer
sudo sysctl -p /etc/sysctl.d/99-custom.conf
| Paramètre | Description | Valeur typique |
|---|---|---|
| vm.swappiness | Propension à utiliser la swap (0-100) | 10-60 |
| vm.dirty_ratio | % RAM avant écriture forcée sur disque | 15-40 |
| net.core.somaxconn | Connexions simultanées en attente | 1024 |
| net.ipv4.tcp_fin_timeout | Durée attente fermeture connexion TCP | 15-60 |
| fs.file-max | Nombre max de fichiers ouverts système | 2097152 |
# Voir l'ordonnanceur actuel d'un disque
cat /sys/block/sda/queue/scheduler
# SSD : utiliser mq-deadline ou none
echo mq-deadline | sudo tee /sys/block/sda/queue/scheduler
# Disque dur mécanique (HDD) : bfq pour priorité interactive
echo bfq | sudo tee /sys/block/sda/queue/scheduler
# Voir la classe et priorité I/O d'un processus
ionice -p 1234
# Lancer une commande en classe idle (plus basse priorité)
ionice -c 3 tar -czf backup.tar.gz /home
# Lancer en classe best-effort, priorité 7 (la plus basse)
ionice -c 2 -n 7 rsync -a /home/ /backup/
# Lancer une commande avec priorité réduite (19 = plus basse)
nice -n 19 tar -czf backup.tar.gz /home
# Changer la priorité d'un processus déjà lancé (PID 1234)
sudo renice +10 -p 1234
# Lancer htop pour voir la nice value de chaque processus
htop
tuned est un daemon qui applique automatiquement des profils d'optimisation selon le cas d'usage de ta machine.
# Vérifier le statut de tuned
sudo systemctl status tuned
# Lister les profils disponibles
tuned-adm list
# Activer le profil desktop (équilibre performances/énergie)
sudo tuned-adm profile desktop
# Serveur : profil throughput-performance
sudo tuned-adm profile throughput-performance
# Laptop sur batterie : profil powersave
sudo tuned-adm profile powersave
# Activer au démarrage
sudo systemctl enable tuned
# Voir l'utilisation de la swap
free -h
# Voir le swappiness actuel
cat /proc/sys/vm/swappiness
# Réduire le swappiness (machines avec beaucoup de RAM)
sudo sysctl vm.swappiness=10
# Vider le cache (drop caches) — nécessite sudo
sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
# Voir les options de montage d'une partition
mount | grep ' / '
# Ajouter noatime dans /etc/fstab pour réduire les écritures disque
# Modifier /etc/fstab — exemple pour la partition racine :
# Remplacer :
# UUID=xxxx / ext4 defaults 0 1
# Par :
# UUID=xxxx / ext4 defaults,noatime 0 1
# Vérifier la fragmentation d'un filesystem ext4
sudo e4defrag /dev/sda1
#!/bin/bash
# Script de diagnostic performances
echo "=== TOP 10 processus par CPU ==="
ps aux --sort=-%cpu | head -11
echo "=== TOP 10 processus par mémoire ==="
ps aux --sort=-%mem | head -11
echo "=== Utilisation mémoire et swap ==="
free -h
echo "=== Espace disque ==="
df -h
echo "=== Load average ==="
uptime
| Commande | Usage |
|---|---|
| iostat -x 1 3 | Statistiques disque (goulot d'étranglement I/O) |
| mpstat -P ALL 1 | Utilisation CPU par cœur |
| pidstat -d 1 | E/S disque par processus |
| sysbench cpu run | Benchmark CPU |
| sysctl -w param=valeur | Modifier un paramètre noyau à chaud |
| /etc/sysctl.d/*.conf | Paramètres permanents du noyau |
| ionice -c 3 cmd | Lancer une commande en basse priorité I/O |
| nice -n 19 cmd | Lancer en basse priorité CPU |
| tuned-adm profile | Optimisation automatique par profil |
| sysctl vm.swappiness | Vérifier/régler l'utilisation de la swap |