Surveiller les E/S disque avec iostat et dstat sur serveur | INTROSERV
EUR
european

EUR

usa

USD

French Fr
Ex. VAT Ex. VAT 0%

Surveillance des E/S disque avec iostat et dstat

Introduction

La surveillance des entrées-sorties disque (disk I/O) est l'une des tâches clés de l'exploitation des serveurs au sein d'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 d'arrière-plan. Même avec suffisamment de RAM et des ressources CPU libres, 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 présente les utilitaires iostat et dstat, leurs principes de fonctionnement, l'interprétation des métriques et une approche pratique pour repérer 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 comprennent les opérations de lecture et d'écriture de données sur des périphériques de type 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 :

  • les bases de données (MySQL, MariaDB, PostgreSQL) ;
  • les applications web à contenu dynamique ;
  • les services de messagerie ;
  • la sauvegarde et la synchronisation des données ;
  • la journalisation (logging) ;
  • le swap et les fichiers temporaires ;
  • les scripts utilisateur et les tâches cron.

Les goulots d'étranglement peuvent provenir de périphériques de stockage lents, d'une forte contention entre processus, d'ordonnanceurs d'E/S non optimaux, d'un fonctionnement incorrect du cache ou des particularités de la virtualisation.

Rôle 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 CPU et des périphériques disque. La tâche principale d'iostat est de montrer avec quelle intensité un disque donné est sollicité, s'il existe une file d'attente de requêtes et quel est le temps d'attente moyen des opérations.

dstat est un outil de supervision polyvalent qui affiche en temps réel des statistiques sur plusieurs sous-systèmes à la fois : CPU, mémoire, disque, réseau, processus. Il permet de corréler l'activité du disque avec la charge globale du serveur et convient bien au diagnostic rapide.

Tip

Ces utilitaires se complètent : iostat fournit une image précise au niveau du périphérique, tandis que dstat apporte 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 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 correspondantes 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 pas à pas

Analyse de base du disque avec iostat

L'utilitaire iostat sert à évaluer la charge du CPU et du sous-système disque, ainsi qu'à détecter les latences et les files d'attente d'E/S.

Syntaxe :

sudo iostat [options] [interval] [count]

Paramètres les plus utilisés :

  • -x - statistiques étendues ;
  • -d - données des disques uniquement ;
  • -k - sortie en kilooctets ;
  • -p - statistiques des partitions ou d'un périphérique donné.

Exemple de base :

sudo iostat -x

Analyse dynamique :

sudo iostat -xk 5 3

L'intervalle et le nombre d'échantillons permettent de suivre l'évolution de la charge dans le temps, plutôt que l'état moyen depuis le démarrage du système.

Exemple de sortie d'iostat

Principales métriques CPU :

  • %iowait - le pourcentage de temps pendant lequel le CPU est inactif en attendant la fin d'opérations d'E/S. Une hausse de cette métrique indique l'influence du disque sur les performances globales.
  • %steal - pertinent pour les serveurs virtuels ; indique le temps CPU « volé ».

Principales métriques disque :

  • %util - le pourcentage de temps pendant lequel le disque était occupé. Des valeurs durablement supérieures à 80-90 % indiquent une saturation du périphérique.
  • r_await - le temps moyen (ms) d'exécution des opérations de lecture (temps d'attente en file inclus).
  • w_await - le temps moyen (ms) d'exécution des opérations d'écriture (temps d'attente en file inclus).
  • aqu-sz - (avg queue size) la longueur moyenne de la file de requêtes du disque. Une valeur > 1 indique déjà la formation d'une file. Une valeur > 2-4 pour un HDD / > 1-2 pour un SSD signifie que le disque ne suit pas la charge.

L'écart entre await et svctm montre si la latence est causée par la file d'attente plutôt que par la vitesse physique du disque.
Si await dépasse svctm de peu (écart < 20-30 %), les latences sont principalement dues au disque lui-même (lecture/écriture physique lente).
Si await est nettement supérieur à svctm (écart > 50-100 %), la latence principale provient de la file de requêtes (aqu-sz sera élevé), 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), svctm n'est pas affiché car son calcul n'est pas fiable. Pour l'analyse, on utilise la combinaison await + aqu-sz : 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 la vue d'ensemble avec dstat

dstat sert à observer le système en temps réel et à corréler la charge disque avec les 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, soyez attentif à :

  • l'augmentation d'iowait du CPU ;
  • les 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 de dstat et d'iostat :

Critère iostat dstat
Précision des données Élevée Élevée
Mode temps réel Limité Excellent
Données historiques Oui (sar) Non
Sortie en couleur Non Oui
Extensibilité Non Plugins
Export CSV Non Oui
Charge CPU Faible Moyenne

Info

dstat est particulièrement utile pour les pics de charge de courte durée, qui ne sont pas toujours visibles dans iostat.

Identification des goulots d'étranglement des E/S disque

Les commandes suivantes servent au 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 ;
  • await supérieur à 20-30 ms pour un SSD ou à 50-100 ms pour un HDD ;
  • aqu-sz supérieur à 2-3, ce qui indique une accumulation dans la file.

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 ex. /dev/sda) - disques SATA/SAS/USB classiques
  • /dev/nvmeXnY (par ex. /dev/nvme0n1) - disques NVMe
  • /dev/vdX - disques virtuels

Identification des processus à l'origine d'une forte charge d'E/S disque

Après avoir constaté, grâce à iostat et dstat, la surcharge du sous-système disque, l'étape suivante consiste à identifier les processus précis qui déclenchent des opérations de lecture ou d'écriture intensives. 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'outil principal pour trouver les processus qui utilisent activement le disque est l'utilitaire iotop.

sudo iotop -ao

Paramètres de la commande :

-a - affiche les statistiques cumulées depuis le démarrage du processus, ce qui aide à repérer les tâches d'arrière-plan à E/S de longue durée ;

-o - n'affiche que les processus qui effectuent actuellement des opérations d'E/S.

Exemple de sortie :

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 de porter une attention particulière aux champs DISK READ et DISK WRITE ainsi qu'au pourcentage de temps d'E/S. En général, les sources de charge sont des processus de bases de données, de sauvegarde, de synchronisation de fichiers ou des scripts utilisateur.

Utilisation de pidstat pour l'analyse des E/S par processus

Pour une analyse plus formalisée et reproductible, on peut utiliser pidstat, qui fait partie du paquet sysstat.

pidstat -d 1

Cette commande affiche les statistiques d'E/S disque de chaque processus à intervalles d'une seconde. Elle est pratique pour repérer les pics d'activité de courte durée et les corréler avec d'autres métriques système.

Info

pidstat est particulièrement utile lorsque la charge apparaît de manière périodique et n'est pas toujours capturée par iotop.

Utilisation de lsof pour l'analyse de l'activité sur les fichiers

Lorsqu'il faut comprendre avec quels fichiers ou répertoires précis un processus travaille, on utilise l'utilitaire lsof.

lsof +D /path

Où /path est un répertoire précis dans lequel il faut identifier les fichiers et processus actifs. Il peut s'agir, par exemple, du répertoire d'une base de données, du répertoire des sauvegardes ou de la zone des 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 indiqué, ce qui est particulièrement utile pour analyser la charge générée par les applications.

Analyse du contexte de la charge

Identifier un processus à forte activité disque n'est pas l'objectif final. L'administrateur doit évaluer le contexte de son fonctionnement :

  • si la charge est attendue pour ce service ;
  • si le processus s'exécute à un moment approprié (par ex. sauvegardes pendant les heures de pointe) ;
  • s'il est possible de modifier la planification ou les paramètres de fonctionnement ;
  • s'il est admissible de réduire la priorité d'E/S.

Cette approche permet de distinguer la charge normale de la charge problématique et de choisir la méthode d'optimisation adéquate.

Vérification de la validité de l'analyse

La validité 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 ;
  • l'augmentation d'iowait dans dstat coïncide avec des opérations disque et non avec la charge CPU ;
  • des mesures répétées montrent un schéma de charge reproductible.

Pour accumuler des données en vue d'une 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 disque sur une période donnée et d'utiliser les données lors de l'investigation d'incidents.

Erreurs fréquentes et particularités d'exploitation

Dans la pratique de l'exploitation des serveurs d'hébergement, les problèmes les plus courants sont les suivants :

  • exécution de sauvegardes et de synchronisations de données pendant les heures de pointe ;
  • utilisation intensive du swap en cas de RAM insuffisante ;
  • un ordonnanceur d'E/S inadapté au type de disque ;
  • absence de priorisation des tâches d'arrière-plan.

Pour réduire l'impact des processus d'arrière-plan sur les performances, il est recommandé d'utiliser l'utilitaire ionice afin de gérer la priorité d'E/S d'un processus, ce qui permet d'atténuer l'effet des tâches d'arrière-plan sur la réactivité du système.

Exemple d'utilisation :

ionice -c3 rsync /source /destination

Principales priorités :

  • -c1 (realtime) - la priorité la plus élevée. Utilisée pour les tâches critiques en termes de latence. Peut bloquer complètement les autres processus.
  • -c2 (best-effort) - la valeur par défaut pour la plupart des processus. Permet d'ajuster le niveau de priorité (de 0 (élevé) à 7 (faible)).
  • -c3 (idle) - arrière-plan. Le processus n'obtient l'accès au disque que lorsqu'aucun autre processus ne l'utilise. Sûr et recommandé pour les opérations d'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, ce qui minimise son impact sur les opérations essentielles du système. L'utilisation d'ionice permet de réduire au minimum l'influence des processus d'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 permettent de repérer les situations de surcharge et d'évaluer l'état du sous-système disque, tandis que des outils tels qu'iotop, pidstat et lsof aident à identifier les processus précis 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 contribuent à réduire les temps de réponse des services, à rendre la charge plus prévisible et à garantir le respect des exigences de SLA. Par la suite, cette méthodologie peut être étendue grâce à une supervision centralisée et à l'automatisation de l'analyse de la charge d'E/S.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • kingdom
  • germany
  • Español
  • French
  • Hrvatska
  • Italiano
  • Poland
  • Slovenski
  • ukraine
  • Türkçe
  • Русский
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA