Surveillance des entrées/sorties de disque avec iostat et dstat
Introduction
La surveillance des entrées-sorties disque est l'une des tâches clés lors de l'exploitation de serveurs dans une infrastructure d'hébergement. Le sous-système de disque affecte directement 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 RAM suffisante et des ressources CPU libres, un disque surchargé ou lent peut devenir le goulot d'étranglement de l'ensemble du système.
Ce manuel est destiné aux administrateurs système, ingénieurs DevOps et propriétaires de serveurs. Il couvre les utilitaires iostat et dstat, les principes de leur fonctionnement, l'interprétation des métriques et une approche pratique pour identifier les goulots d'étranglement des E/S disque dans un environnement d'hébergement.
Informations générales et principes de fonctionnement
E/S disque dans une infrastructure serveur
Les entrées-sorties disque incluent les opérations de lecture et d'écriture de données sur des dispositifs de bloc. Dans les scénarios d'hébergement réels, la charge sur le sous-système de disque est le plus souvent générée par :
- les bases de données (MySQL, MariaDB, PostgreSQL) ;
- les applications web avec contenu dynamique ;
- les services de messagerie ;
- la sauvegarde et la synchronisation des données ;
- la journalisation ;
- les fichiers d'échange et temporaires ;
- les scripts utilisateur et les tâches cron.
Les goulots d'étranglement peuvent survenir en raison de dispositifs de stockage lents, d'une forte concurrence entre les processus, de planificateurs d'E/S non optimaux, d'un fonctionnement incorrect du cache ou de fonctionnalités de virtualisation.
Objectif de iostat et dstat
iostat est un utilitaire du package sysstat conçu pour collecter des statistiques détaillées sur la charge du CPU et des dispositifs de disque. La tâche principale de iostat est de montrer à quel point un disque spécifique est utilisé intensivement, s'il y a une file d'attente de requêtes et quel est le temps d'attente moyen pour les opérations.
dstat est un outil de surveillance polyvalent qui affiche des statistiques en temps réel sur plusieurs sous-systèmes à la fois : CPU, mémoire, disque, réseau, processus. Il permet de corréler l'activité disque avec la charge globale du serveur et est pratique pour un diagnostic rapide.
Ces utilitaires se complètent : iostat fournit une image précise au niveau du dispositif, tandis que dstat fournit le contexte de l'ensemble du système.
Prérequis et exigences
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 la capacité d'exécuter des commandes via sudo.
Vérification de la version de l'OS :
cat /etc/os-release
Installation des packages nécessaires.
Debian / Ubuntu :
sudo apt update
sudo apt install sysstat dstat
CentOS / RHEL / AlmaLinux / Rocky Linux :
sudo yum install sysstat dstat
sudo dnf install sysstat dstat
Vérification du fonctionnement de sysstat :
systemctl status sysstat
Si le service est actif, les informations pertinentes seront affichées :
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 avec iostat
L'utilitaire iostat est utilisé pour évaluer la charge du CPU et du sous-système de disque, ainsi que pour identifier les retards et les files d'attente des E/S.
Syntaxe :
sudo iostat [options] [interval] [count]
Paramètres les plus couramment utilisés :
- -x — statistiques étendues ;
- -d — données uniquement pour le disque ;
- -k — sortie en kilooctets ;
- -p — statistiques pour les partitions ou un dispositif 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 les changements de charge au fil du temps, plutôt que l'état moyen depuis le démarrage du système.
Exemple de sortie iostat :

Métriques clés du CPU :
- %iowait — le pourcentage de temps pendant lequel le CPU est inactif en attendant les opérations d'E/S. Une augmentation de cette métrique indique l'impact du disque sur les performances globales.
- %steal — pertinent pour les serveurs virtuels et montre le temps CPU volé.
Métriques clés du disque :
- %util — le pourcentage de temps pendant lequel le disque était occupé. Des valeurs dépassant constamment 80–90% indiquent une saturation du dispositif.
- r_await — le temps moyen (ms) pour que les opérations de lecture se terminent (y compris le temps de file d'attente).
- w_await — le temps moyen (ms) pour que les opérations d'écriture se terminent (y compris le temps de file d'attente).
- aqu-sz — (taille moyenne de la file d'attente) la longueur moyenne de la file d'attente des requêtes pour le disque. Une valeur > 1 indique déjà une formation de file d'attente. Une valeur > 2–4 pour HDD / > 1–2 pour SSD est un signe que le disque ne suit pas la charge.
La différence entre await et svctm montre si le retard est causé par la file d'attente, plutôt que par la vitesse physique du disque.
Si await dépasse légèrement svctm (différence < 20–30%), les retards sont principalement causés par le disque lui-même (lecture/écriture physique lente).
Si await est significativement supérieur à svctm (différence > 50–100%), le principal retard est causé par la file d'attente de requêtes (aqu-sz sera élevé), indiquant une surcharge du disque par de nombreuses requêtes parallèles.
Dans les versions modernes de iostat (comme dans l'exemple), svctm n'est pas affiché car son calcul est peu fiable. Pour l'analyse, la combinaison de await + aqu-sz est utilisée : un await élevé avec un aqu-sz faible (~0) indique un disque lent ; un await élevé avec un aqu-sz élevé (>1) indique que le disque est surchargé de requêtes.
Analyse de l'image globale avec dstat
dstat est utilisé pour l'observation en temps réel du système et la corrélation de la charge disque avec d'autres ressources.
Exemples de commandes :
dstat -d
dstat --disk-util
dstat -rd --disk-util
dstat -D vda,sda
Exécution d'un exemple avec un intervalle :
dstat -rd --disk-util 1 5
Lors de l'analyse, faites attention à :
- augmentation de iowait dans le CPU ;
- pics de lecture ou d'écriture ;
- activité réseau et disque simultanée (sauvegardes, synchronisation).
Exemple de sortie dstat :
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 de dstat et iostat :
| Critères | iostat | dstat |
|---|---|---|
| Précision des données | Élevée | Élevée |
| Mode temps réel | Limité | Excellent |
| Données historiques | Oui (sar) | Non |
| Sortie colorée | Non | Oui |
| Extensibilité | Non | Plugins |
| Export CSV | Non | Oui |
| Charge CPU | Basse | Moyenne |
dstat est particulièrement utile pour les pics de charge à court terme qui ne sont pas toujours visibles dans iostat.
Identification des goulots d'étranglement des E/S disque
Les commandes suivantes sont utilisées pour 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 au-dessus de 80% pendant une période prolongée ;
- await au-dessus de 20–30 ms pour SSD ou au-dessus de 50–100 ms pour HDD ;
- aqu-sz supérieur à 2–3, indiquant une accumulation de file d'attente.
Dans l'exemple, le disque /dev/vda est utilisé — c'est un disque virtuel (VirtIO) sur un serveur virtuel. Sur les serveurs physiques et dans d'autres environnements, les disques peuvent être nommés différemment.
- /dev/sdX (par exemple, /dev/sda) — disques SATA/SAS/USB réguliers
- /dev/nvmeXnY (par exemple, /dev/nvme0n1) — disques NVMe
- /dev/vdX — disques virtuels
Identification des processus causant une charge élevée des E/S disque
Après avoir établi 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 initiant des opérations de lecture ou d'écriture intensives. Une analyse au niveau du dispositif sans identifier la source de la charge ne permet pas de prendre des mesures correctives appropriées.
Utilisation de iotop
L'outil principal pour trouver les processus qui utilisent activement le disque est l'utilitaire iotop.
sudo iotop -ao
Paramètres de commande :
- -a — affiche les statistiques cumulées depuis le démarrage du processus, ce qui aide à identifier les tâches en arrière-plan avec des E/S à long terme ;
- -o — montre uniquement les processus qui effectuent actuellement des opérations d'E/S.
Exemple de sortie :
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 11056 be/4 mysql 0.00 B 3.44 M 0.00 % 0.76 % mysqld 2580 be/4 rsync 0.00 B 23.48 M 0.00 % 1.17 % rsync
Dans la sortie de iotop, une attention particulière doit être portée aux champs DISK READ, DISK WRITE et au pourcentage de temps d'E/S. Typiquement, 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 répétable, pidstat, qui fait partie du package sysstat, peut être utilisé.
pidstat -d 1
Cette commande affiche les statistiques des E/S disque pour chaque processus à des intervalles d'une seconde. Cela est pratique pour identifier les pics d'activité à court terme et les corréler avec d'autres métriques système.
pidstat est particulièrement utile dans les situations où la charge apparaît périodiquement et peut ne pas toujours être capturée par iotop.
Utilisation de lsof pour l'analyse de l'activité des fichiers
Dans les cas où il est nécessaire de comprendre avec quels fichiers ou répertoires spécifiques un processus travaille, l'utilitaire lsof est utilisé.
lsof +D /path
Où /path est un répertoire spécifique dans lequel les fichiers et processus actifs doivent être identifiés. Par exemple, cela pourrait être un répertoire de base de données, un répertoire de sauvegarde ou une zone de fichiers temporaires.
La 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 lors de l'analyse de la charge des applications.
Analyse du contexte de la charge
Identifier un processus avec une activité disque élevée n'est pas l'objectif final. L'administrateur doit évaluer le contexte de son fonctionnement :
- la charge est-elle attendue pour ce service ;
- le processus s'exécute-t-il à un moment approprié (par exemple, sauvegardes pendant les heures de pointe) ;
- le calendrier ou les paramètres opérationnels peuvent-ils être modifiés ;
- est-il permis de réduire la priorité des E/S.
Cette approche permet de distinguer la charge normale de la charge problématique et de choisir la méthode d'optimisation correcte.
Vérification de la justesse de l'analyse
La justesse 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 iowait dans dstat coïncide avec les opérations disque, et non avec la charge CPU ;
- des mesures répétées montrent un schéma de charge reproductible.
Pour l'accumulation de données et l'analyse ultérieure, il est recommandé d'utiliser la journalisation :
sar -d 1 100 > io.log
Cela permet d'enregistrer le comportement du sous-système de disque sur une période spécifiée et d'utiliser les données lors de l'investigation d'incidents.
Erreurs typiques et caractéristiques opérationnelles
Dans la pratique de l'exploitation des serveurs d'hébergement, les problèmes suivants sont les plus courants :
- exécution de sauvegardes et de synchronisation de données pendant les heures de pointe ;
- utilisation intensive du swap en cas de RAM insuffisante ;
- un planificateur d'E/S inadapté au type de lecteur ;
- absence de priorisation pour les 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é des E/S d'un processus, ce qui permet de réduire 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) — la priorité la plus élevée. Utilisé pour les tâches critiques en termes de latence. Peut bloquer complètement d'autres processus.
- -c2 (meilleur effort) — la valeur par défaut pour la plupart des processus. Permet l'ajustement du niveau de priorité (de 0 (élevé) à 7 (faible)).
- -c3 (inactif) — arrière-plan. Le processus n'obtiendra l'accès au disque que lorsque aucun autre processus ne l'utilise. Sûr et recommandé pour les opérations en arrière-plan (sauvegardes, synchronisation de données).
Dans cet exemple, le processus rsync s'exécute avec la priorité d'E/S la plus basse, minimisant son impact sur les opérations principales du système. L'utilisation de ionice permet de minimiser l'impact des processus en arrière-plan sans avoir besoin de les désactiver complètement.
Conclusion
La surveillance des E/S disque est une partie intégrante du maintien des performances et de la stabilité d'une infrastructure serveur. Les utilitaires iostat et dstat permettent d'identifier les situations de surcharge et d'évaluer l'état du sous-système de disque, tandis que des outils comme iotop, pidstat et lsof aident à identifier les processus spécifiques et la nature de leur charge.
L'application régulière de l'approche décrite, l'interprétation correcte des métriques et la gestion des priorités d'E/S aident à réduire les temps de réponse des services, à augmenter la prévisibilité de la charge et à garantir le respect des exigences SLA. Par la suite, cette méthodologie peut être étendue par une surveillance centralisée et une automatisation de l'analyse de la charge d'E/S.