Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

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

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
freeavailable 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+nprocvmstat 1free/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

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.