Aller au contenu
Administration Linux medium

Vérifier la charge système sous Linux avec uptime et vmstat

12 min de lecture

Le load average mesure le nombre moyen de processus en attente d’exécution ou d’I/O sur 1, 5 et 15 minutes. Pour l’interpréter, divisez-le par le nombre de cœurs CPU (nproc) : un ratio supérieur à 1.0 signifie que le système est surchargé.

  • Lire le load average avec uptime et /proc/loadavg
  • Interpréter les 3 valeurs par rapport au nombre de cœurs CPU
  • Distinguer surcharge CPU, surcharge I/O et saturation mémoire
  • Diagnostiquer en temps réel avec vmstat, top et /proc/pressure
  • Identifier les processus responsables de la surcharge
  • Mettre en place une alerte simple en script

La vérification de la charge système intervient dans de nombreuses situations :

  • Un serveur web répond lentement — vous devez déterminer rapidement si c’est un problème CPU, mémoire ou disque
  • Après un déploiement, vous vérifiez que l’application ne sature pas les ressources
  • Une alerte monitoring signale un load average élevé — vous devez qualifier la nature du problème
  • Vous préparez un dimensionnement : combien de cœurs et de RAM sont réellement utilisés ?
  • En entretien ou en examen, on vous demande de diagnostiquer un serveur lent — la charge système est le premier réflexe
Fenêtre de terminal
uptime
08:13:36 up 14 days, 22:25, 4 users, load average: 0,50, 0,53, 0,41

Les trois valeurs sont la charge moyenne sur 1 minute, 5 minutes et 15 minutes.

Fenêtre de terminal
cat /proc/loadavg
0.50 0.53 0.41 1/2509 2953827
ValeurSignification
0.50Load average 1 minute
0.53Load average 5 minutes
0.41Load average 15 minutes
1/25091 processus en cours d’exécution sur 2509 existants
2953827Dernier PID attribué

Le load average représente le nombre moyen de processus qui sont soit en cours d’exécution (CPU), soit en attente d’I/O (disque, réseau). Pour l’interpréter, il faut le rapporter au nombre de cœurs :

Fenêtre de terminal
nproc
16
Load averageCœursRatioInterprétation
0,50160,03Système très peu chargé
8,00160,50Charge modérée (50 %)
16,00161,00Tous les cœurs occupés — seuil critique
32,00162,00File d’attente — processus ralentis
PatternSignification
1min > 5min > 15minLa charge monte — quelque chose vient de démarrer
1min < 5min < 15minLa charge descend — le pic est passé
Les 3 valeurs prochesCharge stable depuis 15 minutes
1min très élevé, 15min normalPic ponctuel — probablement un batch ou un déploiement

Un load average élevé ne signifie pas forcément que le CPU est surchargé. Les processus en attente d’I/O disque comptent aussi. Pour distinguer :

Fenêtre de terminal
vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- -------cpu-------
r b swpd free buff cache si so bi bo in cs us sy id wa st gu
0 0 272128 7061744 4444732 21433220 0 1 61 561 15162 23 4 2 94 0 0 0
0 0 272128 7061384 4444732 21433280 0 0 0 0 2274 3284 1 1 99 0 0 0
0 0 272128 7055740 4444732 21433296 0 0 0 136 2615 17379 1 1 98 0 0 0
ColonneSignificationCe qu’il faut regarder
rProcessus en cours (run queue)Si r > nproc → CPU saturé
bProcessus bloqués sur I/OSi b > 0 régulièrement → problème disque
us% CPU utilisateurTravail applicatif
sy% CPU systèmeTravail noyau
id% CPU idleTemps libre
wa% CPU en attente I/OLe signal clé : wa élevé = goulot disque
si/soSwap in / Swap outSi > 0 → mémoire insuffisante
Fenêtre de terminal
top -bn1 | head -5
top - 08:13:38 up 14 days, 22:26, 4 users, load average: 0,50, 0,53, 0,41
Tasks: 472 total, 1 running, 471 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1,1 us, 1,1 sy, 0,0 ni, 97,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
MiB Mem : 47953,2 total, 6890,4 free, 16420,6 used, 25271,6 buff/cache
MiB Swap: 4096,0 total, 3830,2 free, 265,8 used. 31532,6 avail Mem

La ligne %Cpu(s) donne la répartition en un coup d’œil : id élevé = système tranquille, wa élevé = problème I/O.

Fenêtre de terminal
# Par CPU
ps aux --sort=-%cpu | head -10
# Par mémoire
ps aux --sort=-%mem | head -10

Dans top, appuyez sur P pour trier par CPU ou M pour trier par mémoire.

Fenêtre de terminal
free -h
total used free shared buff/cache available
Mem: 46Gi 16Gi 6,6Gi 33Mi 24Gi 30Gi
Swap: 4,0Gi 265Mi 3,7Gi
ValeurCe qu’il faut regarder
availableMémoire réellement utilisable (inclut le cache récupérable)
Swap usedSi > 0, le système a manqué de RAM à un moment
Fenêtre de terminal
sudo dmesg | grep -i "out of memory"

Si des lignes apparaissent, le système a dû tuer des processus par manque de mémoire — c’est un signal critique.

PSI — Pressure Stall Information (noyaux récents)

Section intitulée « PSI — Pressure Stall Information (noyaux récents) »

Sur les noyaux Linux 4.20+, /proc/pressure/ donne un indicateur précis de la pression sur chaque ressource :

Fenêtre de terminal
cat /proc/pressure/cpu
some avg10=0.00 avg60=0.04 avg300=0.01 total=16325330830
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
Fenêtre de terminal
cat /proc/pressure/memory
some avg10=0.00 avg60=0.00 avg300=0.00 total=3943556
full avg10=0.00 avg60=0.00 avg300=0.00 total=3814571
Fenêtre de terminal
cat /proc/pressure/io
some avg10=0.04 avg60=0.23 avg300=0.09 total=1144701447
full avg10=0.03 avg60=0.21 avg300=0.09 total=1058047928
Fichiersomefull
cpuAu moins un processus attend du CPU— (pas de full pour CPU)
memoryAu moins un processus attend de la mémoireTous les processus attendent
ioAu moins un processus attend une I/OTous les processus attendent

Les valeurs avg10, avg60, avg300 sont les moyennes sur 10, 60 et 300 secondes (en % du temps). Toute valeur > 5 % mérite investigation.

  1. Charge globale

    Fenêtre de terminal
    uptime
    nproc

    Calculez le ratio load/nproc. Si > 1, continuez le diagnostic.

  2. CPU ou I/O ?

    Fenêtre de terminal
    vmstat 1 5

    Regardez wa (I/O wait) et r (run queue). Si wa > 20 % → problème disque. Si r > nproc → CPU saturé.

  3. Mémoire

    Fenêtre de terminal
    free -h

    Si available est très faible ou Swap used est élevé → mémoire insuffisante.

  4. Identifier le coupable

    Fenêtre de terminal
    ps aux --sort=-%cpu | head -5
    ps aux --sort=-%mem | head -5
  5. Vérifier l’historique

    Fenêtre de terminal
    sudo dmesg | grep -i "out of memory"
    journalctl --since "1 hour ago" -p err
#!/bin/bash
# Alerte si la charge dépasse le nombre de cœurs
LOAD=$(awk '{print $1}' /proc/loadavg)
CPUS=$(nproc)
if (( $(echo "$LOAD > $CPUS" | bc -l) )); then
echo "ALERTE : load $LOAD dépasse $CPUS cœurs" | \
mail -s "Charge élevée sur $(hostname)" admin@example.com
fi

Planifiez ce script avec un timer systemd ou cron toutes les 5 minutes.

SymptômeCause probableSolution
Load élevé, CPU idle élevéProcessus bloqués sur I/O disquevmstat : vérifier wa et b, migrer sur SSD
Load élevé, wa faible, us élevéCharge CPU réelleIdentifier le processus avec top (touche P)
Swap utilisé en permanenceRAM insuffisanteAjouter de la RAM ou réduire le nombre de services
OOM killer dans dmesgMémoire épuisée, processus tuésAugmenter RAM, configurer les limites cgroups
Load à 0 mais serveur lentProblème réseau ou applicatifVérifier ss -tulpn, les latences réseau
Load monte par pic régulierCron ou batch planifiécrontab -l, systemctl list-timers pour identifier
  • Le load average = nombre moyen de processus en exécution ou en attente d’I/O — divisez-le par nproc pour interpréter
  • Trois valeurs (1, 5, 15 min) donnent la tendance : en hausse, stable ou en baisse
  • wa dans vmstat est le signal clé pour distinguer surcharge CPU et surcharge I/O disque
  • free -h : regardez available, pas free, pour évaluer la marge mémoire restante
  • PSI (/proc/pressure/) donne la pression réelle sur CPU, mémoire et I/O sur les noyaux récents
  • Un load > nproc n’est pas toujours un problème CPU — vérifiez toujours wa et swap avant de conclure
  • En production, mettez en place une surveillance automatisée (Prometheus/Grafana) plutôt que des vérifications manuelles

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn