Performance tuning Linux : load, vmstat, iostat et mpstat
À la fin de ce tutoriel, vous saurez interpréter le load average, lire vmstat (procs, mémoire, I/O, CPU), croiser free -h avec la PSI (
/proc/pressure/), analyser le disque avec iostat -xz (sysstat), profilier les cœurs via mpstat, et exécuter un mini-lab contrôlé (dd+ boucles CPU) sous/tmp— sur VM jetable, sans prod ni tuning agressif permanent.Niveau : Intermédiaire · Temps estimé : 45–55 min · Versions testées : Ubuntu 22.04 / 24.04, Debian 12 ; notes Rocky/Alma 9 · Dernière vérification : 2026-09-11
Slug proposé :
linux-performance-tuning· Série : Linux Admin · Remplace / fusionne : N/A — création (chapitre 10)
Prérequis
- Hub Linux Admin ; amont : Kernel modules & sysctl, Monitoring local (
uptime,free, aperçuiostat) - Bases utiles : processus & systemd, processus avancés / cgroups
- VM ou WSL jetable ; compte non-root +
sudopour installersysstatsi besoin - Pas de charge longue sur hôte partagé ; labs sous
/tmp; kill / timeout explicites ; aucun secret
Coût estimé : 0 €. Paquet : sysstat (iostat, mpstat, vmstat selon distro). Snapshot VM recommandé avant stress.
Ce que nous allons construire
Load average + nproc (rappel + seuils)
→ vmstat : procs / mémoire / swap / io / system / cpu
→ free -h + PSI (/proc/pressure/{cpu,memory,io})
→ sysstat : iostat -xz (await, %util, aqu-sz)
→ mpstat -P ALL (répartition cœurs)
→ Mini-lab : dd + boucles CPU sous /tmp
→ Vérification + nettoyage + checklist
(Schéma à remplacer par une image locale Excalidraw / draw.io, alt : « Performance tuning Linux : load, vmstat, free/PSI, iostat -xz, mpstat, lab dd+CPU ».)
Dixième chapitre de Linux Admin. Après sysctl et le monitoring local, on diagnostique : CPU saturé, RAM sous pression, disque en file. Boîte à outils sysstat + /proc — pas Prometheus, pas tuning prod à l’aveugle. Analogie : load ≈ longueur de file ; iostat ≈ guichet disque ; PSI ≈ « manque d’air ».
Étape 1 — Load average : seuils et pièges
Le load average (1 / 5 / 15 min) compte les tâches runnable ou en attente I/O — ce n’est pas un %CPU. Comparez toujours à nproc.
uptime
nproc
cat /proc/loadavg
free -h | head -n 2
| Situation | Lecture probable | Suite |
|---|---|---|
| load₁ ≈ nproc | Machine « pleine » | top / mpstat |
| load₁ ≫ nproc, %CPU bas | Attente I/O / D-state | iostat -xz, vmstat |
| load₁ ≪ nproc, latence app | Autre (réseau, lock…) | Hors cœur ici |
Règle lab : load courte haute pendant 10–20 s de stress = normale ; load 15 min haute sans charge connue = enquête.
Étape 2 — vmstat : vue d’ensemble procs / mémoire / I/O / CPU
vmstat (procps / sysstat) donne une photo périodique : file process, swap, blocs in/out, CPU (us, sy, id, wa, st).
# 1re ligne = depuis boot (ignorer) ; puis échantillons 1 s × 5
vmstat 1 5
| Bloc | Colonnes | Lecture lab |
|---|---|---|
| procs | r, b |
r ≈ runnable ; b bloqués I/O |
| memory | free, buff, cache |
Croiser free -h / available |
| swap | si, so |
Non nuls soutenus → pression RAM |
| io | bi, bo |
Activité disque |
| cpu | us/sy/id/wa/st |
wa → I/O ; st → steal (VM) |
r > nproc et wa bas → CPU. b/wa hauts → disque. si/so non nuls → mémoire avant d’accuser le CPU.
Étape 3 — free -h et PSI (Pressure Stall Information)
free -h : lisez available, pas seulement used (le cache n’est pas « perdu »). La PSI (noyaux récents) mesure le temps d’attente CPU / mémoire / I/O.
free -h
head -n 5 /proc/pressure/cpu 2>/dev/null || echo "PSI cpu absent"
head -n 5 /proc/pressure/memory 2>/dev/null || echo "PSI memory absent"
head -n 5 /proc/pressure/io 2>/dev/null || echo "PSI io absent"
| Source | Signal | Usage |
|---|---|---|
free → available |
RAM allocatable | Éviter panique « used haut » |
/proc/pressure/cpu |
some / avg10… |
Contention CPU |
/proc/pressure/memory |
some/full |
Pression RAM |
/proc/pressure/io |
some/full |
File I/O |
some = au moins une tâche a stallé ; full = toutes les non-idle (plus grave). Comparez avant/après le mini-lab.
Étape 4 — iostat -xz (sysstat) : disque en détail
Installez sysstat si besoin, puis iostat -xz (stats étendues par device).
command -v iostat >/dev/null || {
sudo apt-get update && sudo apt-get install -y sysstat
# Rocky/Alma : sudo dnf install -y sysstat
}
iostat -xz 1 3 # ignorer la 1re ligne (depuis boot)
| Métrique | Sens | Seuil lab |
|---|---|---|
%util |
Occupation device | ~100 % soutenu = saturé |
await |
Latence moyenne (ms) | Hausse sous dd = file |
aqu-sz |
Taille moyenne file | Monte avec la contention |
r/s w/s |
IOPS | Corréler bi/bo vmstat |
Rocky/Alma 9 : même iostat -xz. Jamais de dd sur volume prod : uniquement fichiers jetables sous /tmp.
Étape 5 — mpstat -P ALL : répartition multi-cœurs
mpstat (sysstat) montre si la charge est équilibrée ou coincée sur un cœur (mono-thread, affinité, steal).
mpstat -P ALL 1 3
| Lecture | Hypothèse | Suite |
|---|---|---|
| Un cœur ~100 %, autres idle | Mono-thread | PID via top/ps |
Tous cœurs hauts us |
Parallelisme CPU | OK lab ; cgroups si besoin |
steal élevé |
Contention hyperviseur | Limite VM / voisin |
%iowait haut |
I/O global | Retour iostat -xz |
Croisez mpstat + vmstat + load : trois outils alignés confirment.
Étape 6 — Mini-lab : dd + boucles CPU (lab-safe)
Objectif : voir monter load, %util/await, wa, PSI — puis nettoyer. Durées courtes uniquement.
mkdir -p /tmp/lab-perf && cd /tmp/lab-perf
echo "=== BASELINE ==="
uptime; nproc; free -h | head -n 2; vmstat 1 2 | tail -n 1
dd if=/dev/zero of=/tmp/lab-perf/blob.bin bs=1M count=256 oflag=dsync status=progress &
DDPID=$!
(while true; do :; done) & CP1=$!
(while true; do :; done) & CP2=$!
echo "dd=$DDPID cpu=$CP1 $CP2"
sleep 2
vmstat 1 3
iostat -xz 1 2 | tail -n 25
mpstat -P ALL 1 2 | tail -n 20
uptime
head -n 2 /proc/pressure/cpu 2>/dev/null || true
head -n 2 /proc/pressure/io 2>/dev/null || true
kill "$DDPID" "$CP1" "$CP2" 2>/dev/null || true
wait "$DDPID" "$CP1" "$CP2" 2>/dev/null || true
rm -f /tmp/lab-perf/blob.bin
echo "charges stoppées"
Variante douce : 1 boucle CPU, count=128. Sur WSL/hôte partagé, raccourcissez. Jamais of=/dev/sda ni hors /tmp/lab-perf.
Étape 7 — Vérification et nettoyage
pgrep -af 'lab-perf|blob.bin' || echo "pas de process lab — OK"
pkill -f 'while true; do :; done' 2>/dev/null || true
rm -f /tmp/lab-perf/blob.bin
rmdir /tmp/lab-perf 2>/dev/null || rm -rf /tmp/lab-perf
ls /tmp/lab-perf 2>/dev/null && echo "ATTENTION: lab présent" || echo "lab-perf nettoyé — OK"
uptime && nproc
free -h | head -n 2
vmstat 1 2 | tail -n 1
command -v iostat >/dev/null && iostat -xz 1 1 | head -n 15
command -v mpstat >/dev/null && mpstat -P ALL 1 1 | head -n 20
Validé si : load ↔ nproc, r/b/wa lus, available+PSI utilisés, %util/await expliqués, cœur saturé vu via mpstat, /tmp propre.
Erreurs fréquentes
| Symptôme | Cause | Correction |
|---|---|---|
| « Load = %CPU » | Confusion file vs utilisation | Comparer à nproc ; croiser mpstat |
Première ligne vmstat/iostat trompeuse |
Stats depuis boot | Toujours ≥ 2 échantillons périodiques |
iostat: command not found |
sysstat absent |
apt/dnf install sysstat |
available ignoré |
Lecture seule de used |
Colonne available de free -h |
| PSI vide / absent | Noyau ancien / non exposé | Continuer avec vmstat/free/iostat |
| Lab qui continue | Oubli kill / rm |
Checklist étape 7 |
dd sur disque système |
Mauvais of= |
Uniquement /tmp/lab-perf/ |
| Tuning sysctl « magique » | Optimiser sans mesure | Mesurer d’abord ; sysctl = chapitre précédent |
Quiz (3 questions)
1. Sur 4 vCPU, une load average 1 minute à ~8 indique surtout :
– A. Exactement 8 % CPU
– B. Une file d’exécution / attente clairement au-dessus de la capacité
– C. Que le swap est forcément à zéro
2. Dans iostat -xz, que suggère un %util proche de 100 % avec await en forte hausse ?
– A. Que le CPU est idle à 100 %
– B. Une saturation / file d’attente disque probable
– C. Que nproc vaut 100
3. À quoi sert principalement mpstat -P ALL dans ce chapitre ?
– A. Formater un disque
– B. Voir la répartition de charge par cœur (déséquilibre, steal, iowait)
– C. Remplacer free -h
Réponses : 1‑B · 2‑B · 3‑B
FAQ
Par où commencer : load, vmstat ou iostat ?
Ordre : uptime+nproc → vmstat 1 → free/PSI si mémoire suspecte → iostat -xz si wa/b montent → mpstat pour les cœurs. Le monitoring local reste le socle ; ici on approfondit.
Faut-il toucher sysctl pour « tuner » ?
Pas dans ce lab. Mesurez d’abord. Les knobs (vm.swappiness…) sont dans Kernel modules & sysctl avec restauration. Sans baseline, un réglage aggrave le diagnostic.
Différence avec Prometheus / Grafana ?
Ici : CLI locale, lab jetable, compteurs compris. Les stacks centralisent historique/alertes ; elles ne remplacent pas savoir lire iostat sur une VM sans GUI.
Pour aller plus loin
man vmstat,man iostat,man mpstat,man free; doc PSI noyau- Amont : sysctl · monitoring local
- Suite : Quiz & FAQ Linux Admin
Maillage série Linux Admin
| ← Précédent | Kernel modules & sysctl Linux |
| → Suivant | Quiz & FAQ Linux Admin |
| Hub | Linux Admin |
| Aussi | Monitoring local · Processus avancés / cgroups · Disques & partitions |
Meta publication (à remplir dans Rank Math / SEO)
- Title SEO : Performance tuning Linux : load, vmstat, iostat (2026)
- Meta description (≤ 155) : Diagnostiquez CPU, RAM et disque avec load, vmstat, free/PSI, iostat -xz et mpstat. Guide performance tuning Linux Admin 2026.
- Focus keyphrase : performance tuning linux
- KW secondaires : load average, vmstat, iostat -xz, mpstat, PSI
- Schemas Rank Math : Article + HowTo (étapes lab) + FAQ (3 questions ci-dessus)
- Image mise en avant :
assets/web/devopelastichayway/cover-linux-performance-tuning-1200x630.webp(Visuels Linux — WebP 1200×630) - Catégorie : Linux · Niveau : Intermédiaire
- Slug :
linux-performance-tuning - Statut : HOLD — draft only (ne pas publier)
← Retour parcours Linux — Basics, Admin, Réseau & Sécurité, Shell & Automation.