Symptômes
Vous rencontrez probablement une charge d'E/S disque élevée sur votre instance Elastic Compute Service (ECS) si vous observez l'un des symptômes suivants :
Votre site web ou votre application répond lentement, expire (timeout) ou génère des journaux d'erreurs liés aux E/S.
Les métriques IOPS (opérations d'entrée/sortie par seconde), le débit ou l'utilisation du périphérique (
%util) de l'instance sont excessivement élevés.
Causes
Une charge d'E/S disque élevée résulte généralement de l'une des causes suivantes :
| Cause | Description |
|---|---|
| Processus à forte consommation d'E/S | Un processus s'exécutant sur l'instance, tel que des lectures/écritures de base de données, une écriture intensive de journaux ou une tâche de sauvegarde, génère un grand nombre de requêtes de lecture/écriture sur le disque et épuise la capacité d'E/S de ce dernier. |
| Goulot d'étranglement des performances du disque | La demande normale en E/S de votre activité actuelle dépasse la limite de performance (IOPS ou débit) du disque attaché à l'instance. |
Flux de diagnostic
Utilisez iostat pour confirmer le goulot d'étranglement au niveau du disque, puis utilisez iotop pour identifier le processus spécifique. Enfin, optimisez ou mettez à niveau les ressources selon les besoins.
High disk I/O suspected
|
+--> Run iostat to check disk metrics
|
+--> %util < 80%? --> Disk is not saturated. Check other resources (CPU, memory, network).
|
+--> %util >= 80%? --> Check r_await / w_await (I/O latency)
|
+--> Latency normal, high IOPS/throughput --> Disk is busy but healthy. Consider upgrading.
|
+--> Latency high --> Disk is saturated.
|
+--> Run iotop to identify the responsible process
|
+--> Known process (database, backup, logger) --> Optimize the application
|
+--> Unknown process --> Investigate (scheduled job? system update?)
Métriques clés des E/S disque
Avant de commencer le dépannage, familiarisez-vous avec les métriques fondamentales suivantes qui décrivent les performances des E/S disque :
| Métrique | Description |
|---|---|
| IOPS | Nombre d'opérations de lecture ou d'écriture que le disque effectue par seconde. Les charges de travail avec des E/S aléatoires élevées (telles que les bases de données) sont généralement limitées par les IOPS. |
| Débit | Quantité de données transférées par seconde, mesurée en Ko/s ou Mo/s. Les charges de travail avec des E/S séquentielles importantes (telles que les sauvegardes ou la diffusion multimédia) sont généralement limitées par le débit. |
**%util** |
Pourcentage de temps pendant lequel le disque traite des requêtes d'E/S. Une valeur constamment proche de 100 % indique que le disque est saturé. |
**r_await / w_await** |
Temps moyen (en millisecondes) nécessaire pour traiter les requêtes d'E/S en lecture ou en écriture, incluant le temps d'attente dans la file et le temps de service. Des valeurs élevées indiquent que le disque ne parvient pas à suivre la demande. |
**aqu-sz** |
Nombre moyen de requêtes d'E/S en attente dans la file. Une augmentation de la file d'attente indique une saturation. |
Ces métriques sont interdépendantes : un disque peut être très sollicité (%util proche de 100 %) tout en offrant de bonnes performances si r_await / w_await restent faibles. À l'inverse, un disque peut afficher un %util modéré mais une latence élevée si les opérations d'E/S individuelles sont lentes. Vérifiez toujours à la fois l'utilisation et la latence pour obtenir une vue complète.
Solutions
Étape 1 : Confirmer le goulot d'étranglement des E/S disque
1,1 Connectez-vous à l'instance ECS
Accédez à Console ECS - Instances. Dans la barre de navigation supérieure, sélectionnez la région cible et le groupe de ressources.
Accédez à la page de détails de l'instance cible. Cliquez sur Connect et sélectionnez Workbench. Suivez les instructions affichées à l'écran pour vous connecter au terminal.
1,2 Installez le package sysstat
Le package sysstat inclut iostat. Exécutez la commande d'installation correspondant à votre système d'exploitation :
Alibaba Cloud Linux / CentOS / Fedora
sudo yum install -y sysstat
Ubuntu / Debian
sudo apt install -y sysstat
openSUSE
sudo zypper install -y sysstat
1,3 Exécutez iostat pour surveiller les E/S disque
Exécutez la commande suivante pour afficher les statistiques détaillées du disque en kilo-octets, avec une actualisation toutes les 2 secondes :
iostat -d -x -k 2
| Option | Description |
|---|---|
-d |
Affiche uniquement le rapport d'utilisation des périphériques (sans les statistiques CPU). |
-x |
Affiche les statistiques étendues, y compris %util, r_await / w_await et la profondeur de la file d'attente. |
-k |
Affiche les statistiques en kilo-octets par seconde. |
2 |
Actualise la sortie toutes les 2 secondes. |
Ignorez le premier bloc de sortie de iostat, car il affiche les moyennes depuis le démarrage. Le deuxième bloc et les suivants affichent les statistiques en temps réel.
1,4 Analysez la sortie de iostat
Le tableau suivant explique les colonnes clés :
| Colonne | Description | Éléments à surveiller |
|---|---|---|
r/s |
Requêtes de lecture par seconde (IOPS) | Valeurs inhabituellement élevées par rapport à votre ligne de base |
w/s |
Requêtes d'écriture par seconde (IOPS) | Valeurs inhabituellement élevées par rapport à votre ligne de base |
rkB/s |
Kilo-octets lus par seconde (débit) | Comparez avec la limite de débit de votre disque |
wkB/s |
Kilo-octets écrits par seconde (débit) | Comparez avec la limite de débit de votre disque |
r_await |
Temps d'attente moyen des E/S en lecture (en millisecondes) | Comparez avec votre ligne de base ; une augmentation significative indique un goulot d'étranglement |
w_await |
Temps d'attente moyen des E/S en écriture (en millisecondes) | Comparez avec votre ligne de base ; une augmentation significative indique un goulot d'étranglement |
aqu-sz |
Longueur moyenne de la file d'attente des E/S | Des valeurs croissantes indiquent que le disque ne parvient pas à suivre la cadence |
%util |
Pourcentage de temps pendant lequel le disque est occupé | Une valeur constamment proche de 100 % signifie que le disque est saturé |
Exemple : Disque sain contre disque saturé
Un disque sain affiche généralement un %util faible et une latence réduite :
Device r/s w/s rkB/s wkB/s r_await w_await aqu-sz %util
vda 0.02 0.63 0.55 7.20 2.05 1.99 0.00 0.07
Un disque saturé affiche un %util proche de 100 %, avec une latence et une profondeur de file d'attente élevées :
Device r/s w/s rkB/s wkB/s r_await w_await aqu-sz %util
vda 85.00 210.00 1360.00 6720.00 38.50 52.10 13.30 99.80
Étape 2 : Identifier le processus à forte consommation d'E/S
Une fois que vous avez confirmé la saturation des E/S disque, identifiez le processus à l'origine de la charge élevée.
2,1 Installez iotop
Exécutez la commande d'installation correspondant à votre système d'exploitation :
Alibaba Cloud Linux / CentOS / Fedora
sudo yum install -y iotop
Ubuntu / Debian
sudo apt install -y iotop
openSUSE
sudo zypper install -y iotop
2,2 Affichez les processus actifs effectuant des E/S
Exécutez la commande suivante. L'option -o n'affiche que les processus effectuant activement des E/S :
sudo iotop -o
2,3 Analysez la sortie de iotop
Identifiez le processus : Repérez le processus présentant les E/S les plus élevées dans la colonne
DISK WRITEouDISK READ.Vérifiez l'attente d'E/S : La colonne
IO>indique le pourcentage de temps pendant lequel le processus attend des E/S. Un pourcentage élevé signifie que le processus est fortement limité par les E/S.
Exemple de sortie :
Total DISK READ: 1.35 M/s | Total DISK WRITE: 6.58 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
3218 be/4 mysql 1.30 M/s 5.92 M/s 0.00 % 85.71 % mysqld --user=mysql
1045 be/4 root 0.05 M/s 0.66 M/s 0.00 % 12.50 % rsync --daemon
Dans cet exemple, le processus mysqld est responsable de la majorité des E/S disque.
Étape 3 : Analyser et traiter le processus anormal
Après avoir identifié le processus à forte consommation d'E/S, déterminez la cause racine et appliquez la correction appropriée.
Causes courantes et résolutions :
| Cause | Résolution |
|---|---|
| Base de données (requêtes lentes) | Consultez le journal des requêtes lentes. Optimisez les instructions SQL et les index. |
| Journalisation excessive | Réduisez le niveau de journalisation de l'application (par exemple, passez de DEBUG à INFO) et configurez la rotation des journaux. |
| E/S de fichiers (lectures/écritures fréquentes) | Vérifiez la logique de lecture/écriture des fichiers. Utilisez un cache mémoire et augmentez la taille du tampon. |
| Tâches de sauvegarde | Reprogrammez les tâches de sauvegarde aux heures creuses. Limitez les E/S à l'aide de ionice pour réduire l'impact sur les autres processus. |
| Mises à jour système ou analyses | Vérifiez si des mises à jour automatiques de packages ou des analyses antivirus sont en cours d'exécution. Planifiez ces opérations pendant les fenêtres de maintenance. |
Étape 4 : Évaluer et mettre à niveau les performances du disque (Facultatif)
Si l'optimisation au niveau de l'application ne réduit pas suffisamment la charge d'E/S, envisagez une mise à niveau du disque.
Évaluez vos besoins : Déterminez l'objectif de performance en fonction des IOPS et du débit réels rapportés par
iostat. Comparez ces valeurs aux limites de performance de votre type de disque actuel.Effectuez la mise à niveau : En fonction de votre objectif de performance, mettez à niveau le disque vers une spécification supérieure.
Recommandations
**Configurez la surveillance et les alertes** : Pour les métriques disque clés telles que
%util, les IOPS et le débit, définissez des seuils d'alerte appropriés (par exemple, 80 %) afin de détecter les problèmes tôt, avant qu'ils n'affectent vos applications.Optimisez les E/S de l'application : Au niveau de l'application, implémentez la mise en cache chaque fois que possible pour réduire les lectures et écritures directes sur le disque. Pour les scénarios intensifs en écriture, envisagez d'utiliser des écritures asynchrones ou par lots pour lisser les pics d'E/S.
Établissez une ligne de base de performance : Exécutez
iostat -d -x -k 5pendant les opérations normales et enregistrez les valeurs typiques pour%util,r_await/w_awaitet les IOPS. Lors du dépannage, comparez les métriques actuelles à cette ligne de base pour identifier rapidement les anomalies.Séparez les charges de travail sur plusieurs disques : Si votre instance gère plusieurs charges de travail intensives en E/S (par exemple, les fichiers de base de données et les journaux d'application), envisagez de les placer sur des disques distincts pour répartir la charge d'E/S.