Performance et optimisation
Table des matières
- Métriques clés
- Outils de monitoring
- Optimisation CPU
- Optimisation mémoire
- Optimisation I/O
- Exercices pratiques
1 - Métriques clés
Les 4 ressources fondamentales
Load Average
# Afficher le load
uptime
cat /proc/loadavg
# Exemple: 2.50 1.80 1.20
# = Load sur 1min, 5min, 15min
| Load | État (4 CPUs) |
|---|---|
| < 4.0 | Normal |
| 4.0 - 8.0 | Chargé |
| > 8.0 | Surchargé |
Règle pratique
Load < nombre de CPUs = OK Load > nombre de CPUs = Saturation possible
Métriques USE (Utilization, Saturation, Errors)
| Ressource | Utilization | Saturation | Errors |
|---|---|---|---|
| CPU | CPU time | Run queue | - |
| Mémoire | Mem used | Swapping | OOM |
| Disque | Disk busy | I/O wait | Errors |
| Réseau | TX/RX bytes | Drops | Errors |
🔝 Retour à la table des matières
2 - Outils de monitoring
Vue d'ensemble système
# top - Vue classique
top
# htop - Amélioré
htop
# glances - Tout en un
glances
# dstat - Combiné
dstat -cdngy
CPU
# Utilisation par CPU
mpstat -P ALL 1
# Processus consommateurs
ps aux --sort=-%cpu | head
# Profiling
perf top
perf record -g ./myapp
perf report
Mémoire
# Vue mémoire
free -h
# Détaillé
cat /proc/meminfo
# Par processus
ps aux --sort=-%mem | head
# Mapping mémoire
pmap -x PID
Disque
# Utilisation
df -h
du -sh /*
# I/O en temps réel
iotop
iostat -xz 1
# Latence
ioping /dev/sda
Réseau
# Connexions
ss -tunapl
netstat -tunapl
# Trafic en temps réel
iftop
nethogs
# Statistiques
sar -n DEV 1
🔝 Retour à la table des matières
3 - Optimisation CPU
Identifier les problèmes
# Processus en CPU wait
ps aux | awk '$8 ~ /D/'
# Interruptions
cat /proc/interrupts
watch -n1 'cat /proc/interrupts'
# Context switches
vmstat 1
Nice et priorité
# Lancer avec priorité basse
nice -n 19 ./heavy_task.sh
# Modifier un processus existant
renice -n 10 -p PID
# Afficher les priorités
ps -eo pid,ni,comm | head
CPU Governor
# Voir le governor actuel
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# Governors disponibles
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
# Changer (temporaire)
echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# Permanent avec cpufrequtils
apt install cpufrequtils
cpufreq-set -g performance
Affinité CPU
# Voir l'affinité
taskset -p PID
# Assigner à des CPUs spécifiques
taskset -c 0,1 ./myapp
taskset -c 2-3 -p PID
🔝 Retour à la table des matières
4 - Optimisation mémoire
Comprendre la mémoire Linux
free -h
# total used free shared buff/cache available
# Mem: 16G 4G 2G 1G 10G 10G
# Swap: 2G 0B 2G
| Terme | Description |
|---|---|
| used | Mémoire utilisée par les processus |
| free | Mémoire non utilisée |
| buff/cache | Cache fichiers (libérable) |
| available | Disponible pour les apps |
Paramètres vm
# /etc/sysctl.d/99-memory.conf
# Swappiness (0-100, défaut 60)
# Plus bas = moins de swap
vm.swappiness = 10
# Pression sur le cache
vm.vfs_cache_pressure = 50
# Dirty pages - quand écrire sur disque
vm.dirty_ratio = 20
vm.dirty_background_ratio = 5
# Appliquer
sysctl -p /etc/sysctl.d/99-memory.conf
Vider les caches (test uniquement)
# Sync avant
sync
# Vider PageCache
echo 1 > /proc/sys/vm/drop_caches
# Vider dentries et inodes
echo 2 > /proc/sys/vm/drop_caches
# Vider tout
echo 3 > /proc/sys/vm/drop_caches
Huge Pages
# Vérifier le support
grep -i huge /proc/meminfo
# Configurer
echo 1024 > /proc/sys/vm/nr_hugepages
# Permanent
# /etc/sysctl.conf
vm.nr_hugepages = 1024
OOM Killer
# Ajuster le score OOM d'un processus
# -1000 = ne jamais tuer, +1000 = tuer en premier
echo -500 > /proc/PID/oom_score_adj
# Voir le score
cat /proc/PID/oom_score
🔝 Retour à la table des matières
5 - Optimisation I/O
Scheduler I/O
# Voir le scheduler actuel
cat /sys/block/sda/queue/scheduler
# Schedulers disponibles
# - mq-deadline : SSD et HDD modernes
# - kyber : SSD rapides
# - bfq : Desktop, fairness
# - none : NVMe
# Changer
echo mq-deadline > /sys/block/sda/queue/scheduler
Paramètres de file d'attente
# Read-ahead (Ko)
blockdev --getra /dev/sda
blockdev --setra 4096 /dev/sda
# Queue depth
cat /sys/block/sda/queue/nr_requests
echo 256 > /sys/block/sda/queue/nr_requests
Options de montage
# /etc/fstab optimisé pour SSD
/dev/sda1 / ext4 noatime,nodiratime,discard 0 1
# Options
# noatime : pas de mise à jour access time
# nodiratime : idem pour répertoires
# discard : TRIM pour SSD
# barrier=0 : désactiver barriers (risqué)
Benchmark I/O
# fio - outil de benchmark
apt install fio
# Test lecture séquentielle
fio --name=seqread --rw=read --bs=1M --size=1G --filename=/tmp/test
# Test écriture aléatoire
fio --name=randwrite --rw=randwrite --bs=4k --size=1G --filename=/tmp/test
# Test mixte
fio --name=mixed --rw=randrw --bs=4k --size=1G --filename=/tmp/test
Optimisation filesystem
# Vérifier la fragmentation (ext4)
e4defrag -c /dev/sda1
# Défragmenter
e4defrag /dev/sda1
# Paramètres ext4
tune2fs -l /dev/sda1
# XFS
xfs_info /dev/sda1
xfs_fsr /mountpoint # Défragmentation
🔝 Retour à la table des matières
6 - Exercices pratiques
Exercice 1 : Analyse de charge
Un serveur a un load average de 8.5 sur 4 CPUs. Analysez la situation :
Solution
# 1. Vérifier le load
uptime
# 2. Identifier les processus CPU
top -b -n1 | head -20
ps aux --sort=-%cpu | head
# 3. Vérifier I/O wait
vmstat 1 5
# Si wa% élevé -> problème I/O, pas CPU
# 4. Vérifier les processus en D state
ps aux | awk '$8 ~ /D/'
# Load 8.5 sur 4 CPUs = saturation
# Actions : identifier le goulot d'étranglement
Exercice 2 : Optimisation swap
Réduisez l'utilisation du swap sur un serveur de base de données :
Solution
# /etc/sysctl.d/99-db.conf
vm.swappiness = 1
vm.vfs_cache_pressure = 50
# Appliquer
sysctl -p /etc/sysctl.d/99-db.conf
# Vérifier
cat /proc/sys/vm/swappiness
Quiz
Q1. Que signifie un load average de 4.0 sur une machine avec 2 CPUs ?
Réponse
Le système est surchargé : en moyenne 4 processus attendent un CPU alors qu'il n'y en a que 2 disponibles.
Q2. Quelle commande permet de voir l'I/O par processus ?
Réponse
iotop
🔝 Retour à la table des matières
Points clés à retenir
- USE Method : Utilization, Saturation, Errors pour chaque ressource
- Load Average : comparer au nombre de CPUs
vm.swappiness: réduire pour les serveurs- Scheduler I/O :
mq-deadlinepour SSD/HDD,nonepour NVMe noatime: option de montage pour les performances- Toujours mesurer avant et après optimisation
🔝 Retour à la table des matières
← Chapitre précédent | Chapitre suivant : Haute disponibilité →