Aller au contenu
Administration Linux medium

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

14 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.

uptime reformate en réalité un fichier que le noyau tient à jour en permanence : /proc/loadavg. Le lire directement est utile en script, car les deux dernières colonnes que uptime masque donnent des informations supplémentaires, notamment le nombre de processus actuellement exécutables. La première valeur reste le load average à 1 minute, exactement comme dans uptime.

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

Tendance : ce que révèle l'écart entre les 3 valeurs

Section intitulée « Tendance : ce que révèle l'écart entre les 3 valeurs »

Une seule valeur de load ne dit rien de la direction. La force des trois mesures (1, 5 et 15 minutes) est de montrer si la charge monte ou descend : il suffit de comparer leur ordre de grandeur. Lisez-les de gauche à droite, du plus récent au plus ancien. Ce réflexe évite une erreur classique en astreinte, paniquer sur un load à 1 minute élevé alors que les valeurs à 5 et 15 minutes montrent un pic déjà en train de retomber.

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.

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 CPUPrésent depuis le noyau 5.13, mais reste proche de 0 par construction
memoryAu moins un processus attend de la mémoireTous les processus attendent
ioAu moins un processus attend une I/OTous les processus attendent

La ligne full du fichier cpu existe bien sur les noyaux récents, l'exemple ci-dessus le montre avec total=0. Elle reste quasi nulle : un processus prêt à s'exécuter finit toujours par obtenir du CPU, la notion de blocage total y a donc peu de sens. Sur memory et io, en revanche, un full non négligeable signale que tout le système est à l'arrêt en attente de la ressource, c'est le signal le plus grave.

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.

Ce tableau relie chaque symptôme observable à sa cause la plus probable. Lisez d'abord la colonne du milieu : les deux premières lignes affichent le même symptôme apparent, un load élevé, mais renvoient à des causes opposées, le disque dans un cas, le CPU dans l'autre. La ligne à ne pas manquer est la dernière, load à 0 mais serveur lent : elle rappelle que le load average ignore complètement la latence réseau et applicative.

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

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • 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 tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn