Surveillance des E/S disque avec iostat et dstat : identification des goulots d'étranglement
Introduction
La surveillance des entrées-sorties disque est l’une des tâches essentielles lors de l’exploitation de serveurs dans une infrastructure d’hébergement. Le sous-système disque influe directement sur les performances des services web, des bases de données, des machines virtuelles, des conteneurs et des tâches en arrière-plan. Même avec une mémoire vive (RAM) suffisante et des ressources CPU disponibles, un disque surchargé ou lent peut devenir le goulot d’étranglement de l’ensemble du système.
Ce manuel s'adresse aux administrateurs système, aux ingénieurs DevOps et aux propriétaires de serveurs. Il traite des utilitaires iostat et dstat, de leurs principes de fonctionnement, de l'interprétation des indicateurs, ainsi que d'une approche pratique pour identifier les goulots d'étranglement liés aux E/S disque dans un environnement d'hébergement.
Informations générales et principes de fonctionnement
Les E/S disque dans une infrastructure de serveurs
Les E/S disque comprennent les opérations de lecture et d’écriture de données sur des périphériques bloc. Dans les scénarios d’hébergement réels, la charge sur le sous-système disque est le plus souvent générée par :
- des bases de données (MySQL, MariaDB, PostgreSQL) ;
- des applications web au contenu dynamique ;
- les services de messagerie ;
- la sauvegarde et la synchronisation des données ;
- la journalisation ;
- fichiers d'échange et fichiers temporaires ;
- scripts utilisateur et tâches cron.
Des goulots d'étranglement peuvent survenir en raison de périphériques de stockage lents, d'une forte contention entre les processus, de planificateurs d'E/S non optimaux, d'un fonctionnement incorrect de la mise en cache ou de fonctionnalités de virtualisation.
Objectif d'iostat et de dstat
iostat est un utilitaire du paquet sysstat conçu pour collecter des statistiques détaillées sur la charge du processeur et des périphériques de stockage. La tâche principale d’iostat est d’indiquer l’intensité d’utilisation d’un disque spécifique, de détecter la présence éventuelle d’une file d’attente de requêtes et de fournir le temps d’attente moyen des opérations.
dstat est un outil de surveillance polyvalent qui affiche en temps réel des statistiques sur plusieurs sous-systèmes à la fois : processeur, mémoire, disque, réseau et processus. Il permet de mettre en corrélation l’activité des disques avec la charge globale du serveur et s’avère pratique pour effectuer des diagnostics rapides.
Ces utilitaires se complètent : iostat fournit une image précise au niveau du périphérique, tandis que dstat offre une vue d’ensemble de l’ensemble du système.
Prérequis et conditions requises
Avant de commencer l'analyse, les conditions suivantes doivent être remplies :
- Système d'exploitation Linux (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
- Accès SSH au serveur.
- Privilèges root ou possibilité d'exécuter des commandes via sudo.
Vérification de la version du système d'exploitation :
cat /etc/os-release
Installation des paquets nécessaires :
Debian / Ubuntu :
sudo apt update sudo apt install sysstat dstat
CentOS / RHEL / AlmaLinux / Rocky Linux :
sudo yum install sysstat dstat # or sudo dnf install sysstat dstat
Vérification du fonctionnement de sysstat :
systemctl status sysstat
Si le service est actif, les informations pertinentes s'affichent :
root@server:~# systemctl status sysstat ● sysstat.service - Resets System Activity Logs Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; preset: enabled) Active: active (exited) since Tue 2025-12-23 10:35:35 UTC; 16min ago Docs: man:sa1(8) man:sadc(8) man:sar(1) Main PID: 731 (code=exited, status=0/SUCCESS) CPU: 7ms
Examen et analyse étape par étape
Analyse de base du disque à l'aide d'iostat
L'utilitaire iostat permet d'évaluer la charge du processeur et du sous-système disque, ainsi que d'identifier les retards d'E/S et les files d'attente.
Syntaxe :
sudo iostat [options] [interval] [count]
Paramètres les plus couramment utilisés :
- -x - statistiques étendues ;
- -d : données relatives uniquement au disque ;
- -k - sortie en kilo-octets ;
- -p - statistiques pour les partitions ou un périphérique spécifique.
Exemple de base :
sudo iostat -x
Analyse dynamique :
sudo iostat -xk 5 3
L'intervalle et le nombre d'échantillons vous permettent de suivre l'évolution de la charge au fil du temps, plutôt que l'état moyen depuis le démarrage du système.
Exemple de sortie d'iostat

Indicateurs clés du processeur :
- %iowait: pourcentage de temps pendant lequel le processeur est inactif, en attente d'opérations d'E/S. Une augmentation de cet indicateur indique l'impact du disque sur les performances globales.
- %steal : pertinent pour les serveurs virtuels, cet indicateur indique le temps CPU « volé ».
Indicateurs clés du disque :
- %util : pourcentage de temps pendant lequel le disque était occupé. Des valeurs dépassant systématiquement 80 à 90 % indiquent une saturation du périphérique.
- r_await: temps moyen (en ms) nécessaire à l'exécution des opérations de lecture (temps d'attente en file d'attente compris).
- w_await: temps moyen (en ms) nécessaire à l’exécution des opérations d’écriture (temps d’attente en file d’attente compris).
- aqu-sz - (taille moyenne de la file d'attente) : longueur moyenne de la file d'attente des requêtes pour le disque. Une valeur supérieure à 1 indique déjà la formation d'une file d'attente. Une valeur supérieure à 2-4 pour un disque dur (HDD) ou supérieure à 1-2 pour un SSD (SSD) indique que le disque ne parvient pas à suivre la charge.
La différence entre await et svctm permet de déterminer si le retard est dû à la file d’attente plutôt qu’à la vitesse physique du disque.
Si « await » ne dépasse que légèrement « svctm » (différence < 20 à 30 %), les retards sont principalement dus au disque lui-même (lecture/écriture physique lente).
Si « await » est nettement supérieur à « svctm » (différence > 50 à 100 %), le retard principal est dû à la file d'attente des requêtes (la valeur « aqu-sz » sera élevée), ce qui indique une surcharge du disque due à de nombreuses requêtes parallèles.
Dans les versions récentes d’iostat (comme dans l’exemple), la valeur svctm n’est pas affichée car son calcul n’est pas fiable. Pour l’analyse, on utilise la combinaison « await + aqu-sz » : une valeur « await » élevée avec une valeur « aqu-sz » faible (~0) indique un disque lent ; une valeur « await » élevée avec une valeur « aqu-sz » élevée (>1) indique que le disque est surchargé de requêtes.
Analyse de la situation globale avec dstat
dstat est utilisé pour l’observation du système en temps réel et pour mettre en corrélation la charge du disque avec d’autres ressources.
Exemples de commandes :
dstat -d dstat --disk-util dstat -rd --disk-util dstat -D vda,sda
Exemple d’exécution avec un intervalle :
dstat -rd --disk-util 1 5
Lors de l'analyse, prêtez attention à :
- l'augmentation de la valeur « iowait » au niveau du processeur ;
- aux pics de lecture ou d'écriture ;
- l'activité simultanée du réseau et du disque (sauvegardes, synchronisation).
Example dstat output: dstat -rd --disk-util 1 5 --io/total- -dsk/total- vda- read write| read write|util 0 4.00 | 0 76k|0.50 0 29.5 | 0 240k|0.20 0 1.00 | 0 4096B| 0 0 0 | 0 0 | 0 0 1.00 | 0 32k| 0
Comparaison entre dstat et iostat :
| Critères | iostat | dstat |
|---|---|---|
| Précision des données | Élevée | Élevée |
| Mode temps réel | Limité | Excellente |
| Données historiques | Oui (sar) | Non |
| Sortie en couleur | Non | Oui |
| Extensibilité | Non | Plug-ins |
| Export CSV | Non | Oui |
| Charge CPU | Faible | Moyenne |
dstat est particulièrement utile pour détecter les pics de charge de courte durée qui ne sont pas toujours visibles dans iostat.
Identification des goulots d’étranglement au niveau des E/S disque
Les commandes suivantes permettent d’effectuer un diagnostic rapide :
sudo iostat -mx 2 sudo iostat -p /dev/vda 2 5 sar -d 1 5
Signes typiques d'un problème :
- %util supérieur à 80 % pendant une période prolongée ;
- un temps d'attente supérieur à 20-30 ms pour un SSD ou supérieur à 50-100 ms pour un disque dur ;
- une valeur « aqu-sz » supérieure à 2-3, indiquant une accumulation de la file d’attente.
Dans l'exemple, le disque /dev/vda est utilisé : il s'agit d'un disque virtuel (VirtIO) sur un serveur virtuel.
Sur les serveurs physiques et dans d’autres environnements, les disques peuvent porter des noms différents :
- /dev/sdX (par exemple, /dev/sda) – disques SATA/SAS/USB classiques
- /dev/nvmeXnY (par exemple, /dev/nvme0n1) : disques NVMe
- /dev/vdX : disques virtuels
Identification des processus à l’origine d’une charge élevée d’E/S disque
Après avoir constaté la présence d’une surcharge du sous-système de disque à l’aide de iostat et dstat, l’étape suivante consiste à identifier les processus spécifiques à l’origine d’opérations intensives de lecture ou d’écriture. Une analyse au niveau du périphérique sans identification de la source de la charge ne permet pas de prendre les mesures correctives appropriées.
Utilisation d’iotop
L’utilitaire iotop est l’outil principal permettant de repérer les processus qui sollicitent activement le disque.
sudo iotop -ao
Paramètres de la commande :
-a - affiche les statistiques cumulées depuis le démarrage du processus, ce qui permet d'identifier les tâches en arrière-plan générant des E/S à long terme ;
-o - affiche uniquement les processus qui effectuent actuellement des opérations d’E/S.
Exemple de résultat :
TID 41PRIO USER41DISK READ41DISK WRITE41SWAPIN41IO>4141COMMAND 1105641be/441mysql410.00 B 413.44 M410.00 %410.76 %41mysqld 258041be/441rsync410.00 B4123.48 M410.00 %411.17 %41rsync
Dans la sortie d’iotop, il convient d’accorder une attention particulière aux champs DISK READ, DISK WRITE et au pourcentage de temps d’E/S. En général, les sources de charge sont les processus de base de données, les processus de sauvegarde, les processus de synchronisation de fichiers ou les scripts utilisateur.
Utilisation de pidstat pour l'analyse des E/S par processus
Pour une analyse plus formalisée et reproductible, il est possible d’utiliser pidstat, qui fait partie du paquet sysstat.
pidstat -d 1
Cette commande affiche les statistiques d’E/S disque pour chaque processus à des intervalles d’une seconde. Cela s’avère pratique pour identifier les pics d’activité de courte durée et les mettre en corrélation avec d’autres indicateurs système.
pidstat est particulièrement utile dans les situations où la charge apparaît de manière périodique et n’est pas toujours détectée par iotop.
Utilisation de lsof pour l’analyse de l’activité des fichiers
Lorsqu'il est nécessaire de comprendre avec quels fichiers ou répertoires spécifiques un processus travaille, on utilise l'utilitaire lsof.
lsof +D /path
Où/path est un répertoire spécifique au sein duquel les fichiers et processus actifs doivent être identifiés. Il peut s’agir, par exemple, d’un répertoire de base de données, d’un répertoire de sauvegarde ou d’un espace de fichiers temporaires.
Cette commande permet de déterminer quels processus détiennent actuellement des descripteurs de fichiers et effectuent des opérations dans le chemin spécifié, ce qui est particulièrement utile pour analyser la charge générée par les applications.
Analyse du contexte de charge
L’identification d’un processus présentant une forte activité disque n’est pas un objectif en soi. L’administrateur doit évaluer le contexte de son fonctionnement :
- la charge est-elle normale pour ce service ?
- le processus s'exécute-t-il à un moment approprié (par exemple, des sauvegardes pendant les heures de pointe) ;
- est-il possible de modifier le calendrier ou les paramètres opérationnels ;
- est-il acceptable de réduire la priorité des E/S ?
Cette approche permet de distinguer une charge normale d’une charge problématique et de choisir la méthode d’optimisation appropriée.
Vérification de la validité de l’analyse
L'exactitude de l'analyse effectuée est confirmée si :
- les pics de %util, await ou aqu-sz dans iostat coïncident dans le temps avec l’activité des processus dans iotop ou pidstat ;
- une augmentation de l’iowait dans dstat coïncide avec des opérations sur le disque, et non avec la charge du processeur ;
- les mesures répétées montrent un profil de charge reproductible.
Pour la collecte de données et l'analyse ultérieure, il est recommandé d'utiliser la journalisation :
sar -d 1 100 > io.log
Cela vous permet d'enregistrer le comportement du sous-système disque sur une période donnée et d'utiliser ces données lors de l'analyse des incidents.
Erreurs courantes et particularités opérationnelles
Dans la pratique de l'exploitation des serveurs d'hébergement, les problèmes suivants sont les plus courants :
- l'exécution de sauvegardes et de synchronisations de données pendant les heures de pointe ;
- utilisation intensive de la mémoire swap lorsque la mémoire vive (RAM) est insuffisante ;
- un planificateur d'E/S inadapté au type de disque ;
- l'absence de hiérarchisation des tâches en arrière-plan.
Pour réduire l'impact des processus en arrière-plan sur les performances, il est recommandé d'utiliser l'utilitaire ionice pour gérer la priorité d'E/S d'un processus, ce qui permet d'atténuer l'impact des tâches en arrière-plan sur la réactivité du système.
Exemple d'utilisation :
ionice -c3 rsync /source /destination
Priorités clés :
- -c1 (temps réel) : priorité la plus élevée. Utilisée pour les tâches où la latence est critique. Peut bloquer complètement les autres processus.
- -c2 (meilleur effort) : valeur par défaut pour la plupart des processus. Permet d’ajuster le niveau de priorité (de 0 (élevé) à 7 (faible)).
- -c3 (inactif) : en arrière-plan. Le processus n’aura accès au disque que lorsqu’aucun autre processus ne l’utilise. Solution sûre et recommandée pour les opérations en arrière-plan (sauvegardes, synchronisation des données).
Dans cet exemple, le processus rsync s’exécute avec la priorité d’E/S la plus faible, ce qui minimise son impact sur les opérations essentielles du système. L’utilisation d’ionice vous permet de minimiser l’impact des processus en arrière-plan sans avoir à les désactiver complètement.
Conclusion
La surveillance des E/S disque fait partie intégrante du maintien des performances et de la stabilité d’une infrastructure serveur. Les utilitaires iostat et dstat vous permettent d’identifier les situations de surcharge et d’évaluer l’état du sous-système disque, tandis que des outils tels que iotop, pidstat et lsof aident à identifier des processus spécifiques et la nature de leur charge.
L’application régulière de l’approche décrite, l’interprétation correcte des indicateurs et la gestion des priorités d’E/S contribuent à réduire les temps de réponse des services, à améliorer la prévisibilité de la charge et à garantir le respect des exigences des accords de niveau de service (SLA). Par la suite, cette méthodologie peut être étendue grâce à une surveillance centralisée et à l’automatisation de l’analyse de la charge d’E/S.