Votre serveur Linux est lent et vous ne savez pas par où commencer ? Ce guide vous apprend à diagnostiquer rapidement les problèmes de performance en utilisant la méthode USE (Utilization, Saturation, Errors). En 10 minutes, vous saurez identifier si le problème vient du CPU, de la mémoire, du disque ou du réseau — et quelles commandes utiliser pour le confirmer.
Vous apprendrez à :
- Comprendre les 4 types de contention qui ralentissent un serveur
- Appliquer la méthode USE de manière systématique
- Interpréter les métriques avec les bonnes commandes
- Corriger les problèmes les plus courants
Qu’est-ce qu’un problème de performance ?
Section intitulée « Qu’est-ce qu’un problème de performance ? »Imaginez un serveur comme une cuisine de restaurant. Quand tout va bien, les plats sortent régulièrement. Mais si le chef est débordé (CPU), s’il manque de plans de travail (mémoire), si le frigo est trop lent à ouvrir (disque), ou si les serveurs se bousculent dans le couloir (réseau), tout ralentit.
En informatique, on appelle ça une contention : une ressource est sollicitée au-delà de ses capacités, créant une file d’attente.
Pourquoi un serveur devient-il lent ?
Section intitulée « Pourquoi un serveur devient-il lent ? »Un serveur exécute des processus (des programmes en cours d’exécution). Chaque processus a besoin de ressources pour fonctionner :
- Du temps CPU pour effectuer des calculs
- De la mémoire RAM pour stocker ses données temporaires
- Des accès disque pour lire/écrire des fichiers
- De la bande passante réseau pour communiquer
Quand trop de processus demandent la même ressource en même temps, ils doivent faire la queue. C’est cette attente qui crée la lenteur.
Les 4 types de contention
Section intitulée « Les 4 types de contention »Avant de plonger dans les commandes, comprenons ce qui peut mal tourner sur chaque ressource.
CPU (processeur)
Section intitulée « CPU (processeur) »Le CPU (Central Processing Unit) est le “cerveau” de l’ordinateur. Il exécute toutes les instructions des programmes. Quand le CPU est saturé, tout devient lent car les processus doivent attendre leur tour pour être exécutés.
Signes révélateurs : applications qui “rament”, temps de réponse élevé, ventilateurs qui tournent fort.
Mémoire (RAM)
Section intitulée « Mémoire (RAM) »La RAM (Random Access Memory) est la mémoire à court terme du serveur. Les programmes y stockent les données qu’ils utilisent activement. Quand elle est pleine, Linux utilise le swap (espace disque utilisé comme mémoire de secours), ce qui est 100 à 1000 fois plus lent.
Signes révélateurs : swap utilisé, processus tués automatiquement (OOM-Killer), lenteur soudaine.
Disque (stockage)
Section intitulée « Disque (stockage) »Le disque stocke les données de façon permanente (fichiers, bases de données, logs). Les opérations disque sont naturellement plus lentes que la RAM. Quand le disque est saturé, même les opérations simples prennent du temps.
Signes révélateurs : fichiers longs à ouvrir, bases de données lentes, %iowait élevé dans les métriques.
Réseau (bande passante)
Section intitulée « Réseau (bande passante) »Le réseau permet au serveur de communiquer avec l’extérieur (utilisateurs, autres serveurs, APIs). Quand la bande passante est saturée ou mal configurée, les connexions échouent ou sont très lentes.
Signes révélateurs : timeouts, connexions refusées, téléchargements lents.
| Contention | Symptômes typiques | Causes fréquentes |
|---|---|---|
| CPU | Processus lents, latence élevée | Trop de processus, calculs intensifs |
| Mémoire | Swap actif, OOM-Killer | Applications gourmandes, fuites mémoire |
| Disque | Lecture/écriture lente, %iowait élevé | Base de données non optimisée, logs excessifs |
| Réseau | Connexions refusées, timeouts | Bande passante saturée, attaques DDoS |
La méthode USE : une approche systématique
Section intitulée « La méthode USE : une approche systématique »La méthode USE (Utilization, Saturation, Errors), créée par Brendan Gregg, expert performance chez Netflix, propose d’analyser chaque ressource selon 3 critères :
| Critère | Question à poser | Ce que ça révèle |
|---|---|---|
| U - Utilization | Quel % de la ressource est utilisé ? | Si proche de 100%, elle est saturée |
| S - Saturation | Y a-t-il une file d’attente ? | Des processus attendent la ressource |
| E - Errors | Y a-t-il des erreurs ? | Problèmes matériels ou de configuration |
Comprendre le load average
Section intitulée « Comprendre le load average »Avant d’analyser chaque ressource, parlons du load average — la métrique la plus connue mais aussi la plus mal comprise.
Qu’est-ce que le load average ?
Section intitulée « Qu’est-ce que le load average ? »Le load average (charge moyenne) est un nombre qui représente combien de travail le système doit effectuer. Plus précisément, c’est le nombre moyen de processus qui :
- S’exécutent actuellement sur un CPU
- Attendent un CPU disponible
- Attendent une opération disque (I/O)
Comment voir le load average ?
Section intitulée « Comment voir le load average ? »uptime11:05:07 up 15 days, 5:57, 1 user, load average: 2.70, 2.40, 2.07Le load average montre le nombre de processus qui sont soit en exécution, soit en attente du CPU, sur 3 périodes :
- 1ère valeur (2.70) : dernière minute (charge actuelle)
- 2ème valeur (2.40) : 5 dernières minutes (tendance court terme)
- 3ème valeur (2.07) : 15 dernières minutes (tendance long terme)
Comment lire cette tendance ?
- Si la 1ère valeur > 3ème valeur → La charge augmente (pic en cours)
- Si la 1ère valeur < 3ème valeur → La charge diminue (retour à la normale)
- Si les 3 valeurs sont proches → Charge stable
Comment interpréter ces chiffres ?
Section intitulée « Comment interpréter ces chiffres ? »La règle d’or : divisez par le nombre de cœurs CPU.
Pourquoi ? Parce qu’un serveur avec 4 cœurs peut exécuter 4 processus en parallèle. Un load de 4 sur un serveur 4 cœurs signifie que chaque cœur travaille à 100% — c’est la limite avant que des processus ne commencent à attendre.
nproc4Cette commande affiche le nombre de cœurs CPU disponibles.
Sur un serveur 4 cœurs :
| Load average | Calcul | Interprétation |
|---|---|---|
| 2.0 | 2.0 / 4 = 0.5 | ✅ 50% d’utilisation, tout va bien |
| 4.0 | 4.0 / 4 = 1.0 | ⚠️ 100% utilisé, à surveiller |
| 8.0 | 8.0 / 4 = 2.0 | 🔴 Surcharge, des processus attendent |
Diagnostic CPU
Section intitulée « Diagnostic CPU »Le CPU est souvent le premier suspect quand un serveur est lent. Voyons comment vérifier s’il est réellement en cause.
Étape 1 : Vérifier l’utilisation globale
Section intitulée « Étape 1 : Vérifier l’utilisation globale »La commande mpstat (Multi-Processor Statistics) montre comment le CPU répartit son temps entre différentes activités :
mpstat -P ALL 1 3Décortiquons cette commande :
mpstat: affiche les statistiques CPU-P ALL: pour tous les cœurs (pas seulement la moyenne)1: rafraîchir toutes les 1 seconde3: pendant 3 itérations
CPU %usr %sys %iowait %idleall 75.2 10.3 8.5 6.0 0 80.1 10.5 5.2 4.2 1 70.3 10.1 11.8 7.8Que signifie chaque colonne ?
Le CPU divise son temps en plusieurs catégories. Imaginez une journée de travail :
| Métrique | Analogie | Signification technique | Seuil d’alerte |
|---|---|---|---|
%usr | Travail productif | Temps passé sur vos applications (MySQL, Nginx, etc.) | > 80% constant |
%sys | Réunions internes | Temps passé sur le noyau Linux (gestion mémoire, réseau) | > 20% |
%iowait | Attente du courrier | CPU inactif car il attend le disque | > 10% |
%idle | Pause café | CPU qui ne fait rien, disponible | < 10% = surcharge |
Étape 2 : Identifier les processus gourmands
Section intitulée « Étape 2 : Identifier les processus gourmands »top -o %CPUAppuyez sur 1 pour voir chaque cœur, q pour quitter.
Vérification : Le processus en haut consomme-t-il plus de 90% ?
Étape 3 : Vérifier la saturation
Section intitulée « Étape 3 : Vérifier la saturation »vmstat 1 5procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 7 0 0 102400 51200 512000 0 0 5 10 200 400 75 10 5 10 0La colonne r est clé : elle montre les processus en attente du CPU.
r≤ nombre de cœurs → OKr> nombre de cœurs → Saturation CPU
Corrections possibles
Section intitulée « Corrections possibles »-
Identifier le processus fautif avec
topet vérifier s’il est normal qu’il consomme autant. -
Réduire la priorité d’un processus non critique :
Fenêtre de terminal renice +10 -p <PID> -
Limiter les ressources avec cgroups ou taskset :
Fenêtre de terminal taskset -c 0,1 mon_processus -
Optimiser l’application : profiler avec
perf toppour trouver les fonctions gourmandes.
Diagnostic mémoire
Section intitulée « Diagnostic mémoire »La mémoire RAM est cruciale pour les performances. Contrairement au CPU qui peut “faire la queue”, quand la RAM est pleine, Linux doit prendre des mesures drastiques.
Comment Linux gère la mémoire
Section intitulée « Comment Linux gère la mémoire »Avant de regarder les commandes, comprenons comment Linux utilise la RAM :
- Mémoire applicative : utilisée par vos programmes (MySQL, Nginx, etc.)
- Buffer/Cache : Linux utilise la RAM “libre” pour accélérer les accès disque
- Swap : espace disque utilisé comme “RAM de secours” (très lent)
Étape 1 : Vérifier l’utilisation
Section intitulée « Étape 1 : Vérifier l’utilisation »free -hL’option -h affiche les valeurs en format lisible (Gi, Mi) au lieu d’octets.
total used free shared buff/cache availableMem: 16Gi 12Gi 1.5Gi 145Mi 2.5Gi 3.2GiSwap: 2.0Gi 512Mi 1.5GiDécryptage ligne par ligne :
| Colonne | Signification | Dans notre exemple |
|---|---|---|
total | RAM totale installée | 16 Go |
used | RAM utilisée (apps + cache) | 12 Go |
free | RAM complètement libre | 1.5 Go |
buff/cache | RAM utilisée pour le cache disque | 2.5 Go |
available | RAM réellement disponible pour de nouvelles apps | 3.2 Go |
Ce qui compte vraiment :
- available (pas free !) : mémoire réellement disponible pour les applications
- Swap used : si > 0, la mémoire RAM est insuffisante
Étape 2 : Vérifier la saturation (swap)
Section intitulée « Étape 2 : Vérifier la saturation (swap) »vmstat 1 5Regardez les colonnes si (swap-in) et so (swap-out) :
---swap-- si so 10 35- si/so > 0 → Le système utilise le swap = mémoire insuffisante
- so élevé → Écriture vers le swap, très lent
Étape 3 : Vérifier les erreurs (OOM-Killer)
Section intitulée « Étape 3 : Vérifier les erreurs (OOM-Killer) »dmesg | grep -i oomOut of memory: Kill process 1234 (java) score 987Killed process 1234 (java) total-vm:20480000kBSi vous voyez ce message, le noyau a tué un processus par manque de mémoire. C’est critique.
Corrections possibles
Section intitulée « Corrections possibles »-
Identifier les consommateurs :
Fenêtre de terminal ps aux --sort=-%mem | head -10 -
Ajouter de la RAM si la charge est légitime.
-
Limiter les caches applicatifs (MySQL innodb_buffer_pool_size, Java Xmx).
-
Ajouter du swap sur SSD en cas d’urgence :
Fenêtre de terminal dd if=/dev/zero of=/swapfile bs=1G count=4mkswap /swapfile && swapon /swapfile
Diagnostic disque (IO)
Section intitulée « Diagnostic disque (IO) »Le disque est souvent le composant le plus lent d’un serveur. Même un SSD est 1000 fois plus lent que la RAM. Quand le disque est saturé, tout le système en souffre.
Pourquoi le disque est-il si critique ?
Section intitulée « Pourquoi le disque est-il si critique ? »Chaque fois qu’un programme lit ou écrit un fichier, il fait une opération I/O (Input/Output). Ces opérations incluent :
- Lecture de fichiers de configuration
- Écriture de logs
- Requêtes de base de données
- Swap (mémoire → disque)
Étape 1 : Vérifier l’utilisation
Section intitulée « Étape 1 : Vérifier l’utilisation »iostat -dx 2 3Décortiquons cette commande :
iostat: statistiques d’entrées/sorties-d: afficher les stats disque (pas CPU)-x: affichage étendu avec plus de métriques2: rafraîchir toutes les 2 secondes3: pendant 3 itérations
Device r/s w/s rkB/s wkB/s %utilsda 100 80 4000 2048 95.00Que signifie chaque colonne ?
| Colonne | Signification | Dans notre exemple |
|---|---|---|
r/s | Lectures par seconde | 100 ops/s |
w/s | Écritures par seconde | 80 ops/s |
rkB/s | Débit lecture (Ko/s) | 4 Mo/s |
wkB/s | Débit écriture (Ko/s) | 2 Mo/s |
%util | % du temps où le disque travaille | 95% |
La colonne %util est clé :
- < 70% → OK
- 70-90% → À surveiller
- > 90% → Goulot d’étranglement
Étape 2 : Identifier les processus
Section intitulée « Étape 2 : Identifier les processus »iotopTotal DISK READ: 12.00 M/s | Total DISK WRITE: 3.00 M/s PID USER DISK READ DISK WRITE COMMAND 2345 mysql 8.00 M/s 1.00 M/s mysqldÉtape 3 : Vérifier les erreurs disque
Section intitulée « Étape 3 : Vérifier les erreurs disque »smartctl -a /dev/sda | grep -E "Reallocated|Error"Reallocated_Sector_Ct: 12Reported_Uncorrect: 3Si ces valeurs augmentent, le disque est en train de mourir.
Corrections possibles
Section intitulée « Corrections possibles »-
Migrer vers un SSD/NVMe pour les workloads intensifs.
-
Optimiser les requêtes de base de données (index manquants).
-
Activer le caching applicatif (Redis, Varnish).
-
Changer le scheduler IO pour les SSD :
Fenêtre de terminal echo none > /sys/block/sda/queue/scheduler
Diagnostic réseau
Section intitulée « Diagnostic réseau »Le réseau connecte votre serveur au monde extérieur. Un problème réseau peut ressembler à un problème applicatif (timeouts, lenteurs), ce qui le rend parfois difficile à identifier.
Types de problèmes réseau
Section intitulée « Types de problèmes réseau »| Problème | Symptôme | Cause typique |
|---|---|---|
| Bande passante saturée | Transferts lents | Trop de trafic, attaque DDoS |
| Paquets perdus | Connexions instables | Réseau physique défaillant |
| Connexions refusées | ”Connection refused” | Port fermé, limite atteinte |
| Latence élevée | Réponses lentes | Réseau congestionné, routage |
Étape 1 : Vérifier l’utilisation
Section intitulée « Étape 1 : Vérifier l’utilisation »ip -s link show eth0Cette commande affiche les statistiques de l’interface réseau eth0 (adaptez le nom à votre serveur : ens3, enp0s3, etc.).
RX: bytes 1234567890 packets 12345678TX: bytes 9876543210 packets 9876543RX errors 0 dropped 10TX errors 0 dropped 2Décryptage :
| Ligne | Signification | À surveiller |
|---|---|---|
RX | Réception (trafic entrant) | Volume de données reçues |
TX | Transmission (trafic sortant) | Volume de données envoyées |
errors | Paquets corrompus | > 0 = problème physique |
dropped | Paquets abandonnés | > 0 = saturation ou config |
Étape 2 : Vérifier la saturation des connexions
Section intitulée « Étape 2 : Vérifier la saturation des connexions »ss -sCette commande (socket statistics) donne un résumé des connexions réseau.
TCP: 145 (estab 120, closed 15, timewait 5)Que signifient ces états ?
| État | Signification | Problème si… |
|---|---|---|
estab | Connexions actives | Nombre très élevé (> 10000) |
closed | Connexions fermées récemment | Normal |
timewait | En attente de fermeture complète | > 1000 = fuite de connexions |
Étape 3 : Identifier le trafic
Section intitulée « Étape 3 : Identifier le trafic »iftop -i eth0Ou pour voir par processus :
nethogs eth0Corrections possibles
Section intitulée « Corrections possibles »-
Optimiser les paramètres TCP :
Fenêtre de terminal sysctl -w net.ipv4.tcp_tw_reuse=1sysctl -w net.ipv4.tcp_fin_timeout=15 -
Limiter les connexions avec iptables/firewalld.
-
Utiliser un CDN pour le contenu statique.
-
Augmenter la bande passante si légitime.
Installer les outils de diagnostic
Section intitulée « Installer les outils de diagnostic »Certaines commandes ne sont pas installées par défaut. Voici comment les obtenir :
sudo apt updatesudo apt install sysstat iotop nethogs iftop smartmontoolssudo dnf install sysstat iotop nethogs iftop smartmontoolsCe que chaque paquet apporte :
| Paquet | Commandes | Usage |
|---|---|---|
sysstat | mpstat, iostat, sar | Métriques CPU, disque, historique |
iotop | iotop | I/O par processus (comme top pour le disque) |
nethogs | nethogs | Bande passante par processus |
iftop | iftop | Trafic réseau en temps réel |
smartmontools | smartctl | Santé des disques (S.M.A.R.T.) |
Tableau récapitulatif : diagnostic rapide
Section intitulée « Tableau récapitulatif : diagnostic rapide »| Ressource | Commande rapide | Ce qui indique un problème |
|---|---|---|
| CPU | uptime | Load > nombre de cœurs |
| CPU | mpstat 1 | %idle < 10% |
| Mémoire | free -h | available < 10% total |
| Mémoire | vmstat 1 | si/so > 0 |
| Disque | iostat -dx 1 | %util > 90% |
| Disque | vmstat 1 | wa > 20% |
| Réseau | ip -s link | errors/dropped > 0 |
| Réseau | ss -s | timewait élevé |
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
| Load average élevé, CPU idle élevé | Attente IO (disque lent) | Vérifier iostat, migrer sur SSD |
| Swap utilisé, OOM dans dmesg | Mémoire insuffisante | Ajouter RAM ou limiter applications |
| %iowait élevé | Base de données non optimisée | Ajouter des index, caching |
| Connexions refusées | Limite de fichiers atteinte | ulimit -n et /etc/security/limits.conf |
À retenir
Section intitulée « À retenir »- La méthode USE (Utilization, Saturation, Errors) permet un diagnostic systématique.
- Le load average doit être divisé par le nombre de cœurs pour être interprété.
- %iowait élevé indique un problème disque, pas CPU.
- Swap actif = mémoire insuffisante, à corriger rapidement.
%util> 90% sur iostat signifie que le disque est le goulot d’étranglement.- Surveillez proactivement avec Prometheus/Grafana pour anticiper les problèmes.