Linux : Comment trouver les processus qui consomment de l'IO sur le disque ?
Votre serveur Linux rame sans raison apparente ? Il est possible qu’un ou plusieurs processus effectuent trop d’entrées/sorties (IO) sur le disque dur, ce qui peut ralentir l’ensemble du système.
Dans cet article, nous allons voir comment identifier ces processus en utilisant un petit script Perl "iodump", ainsi que quelques commandes alternatives comme iotop et lsof pour une analyse plus approfondie.
🔍 Pourquoi surveiller la consommation d’IO sous Linux ?
Les performances d’un serveur Linux peuvent être fortement affectées par une consommation excessive d’IO. Voici quelques cas typiques où il est utile de surveiller l’usage du disque :
✅ Un serveur web ou une base de données qui devient lent sans raison apparente.
✅ Un disque dur ou un SSD qui semble fonctionner en permanence.
✅ Une application qui consomme anormalement des ressources.
🛠️ Méthode 1 : Utiliser le script "iodump" pour identifier les processus gourmands
1️⃣ Activer la journalisation des IO du kernel
Avant de pouvoir analyser les processus en cours, nous devons activer la journalisation des entrées/sorties au niveau du noyau :
echo 1 > /proc/sys/vm/block_dump
Cette commande demande au kernel de loguer toutes les opérations IO effectuées par les processus.
2️⃣ Télécharger et exécuter le script Perl "iodump"
Nous allons utiliser le script iodump, qui permet de transformer ces logs en un rapport lisible.
👉 Téléchargement du script :
wget https://aspersa.googlecode.com/svn/trunk/iodump
👉 Exécution du script :
while true; do sleep 1; dmesg -c; done | perl iodump
💡 Interruption et affichage des résultats
Appuyez sur Ctrl + C
pour arrêter l’analyse et afficher la synthèse des processus ayant consommé le plus d’IO.
3️⃣ Analyser les résultats
Voici un exemple de sortie du script :
^C# Caught SIGINT.
TASK PID TOTAL READ WRITE DIRTY DEVICES
jbd2/sda2-8 244 151 0 151 0 sda2
flush-8:0 243 55 0 55 0 sda2
bash 30163 7 0 7 0 sda2
lighttpd 16720 2 2 0 0 sda2
vi 30500 1 0 1 0 sda2
Explication des colonnes :
Colonne | Description |
---|---|
TASK | Nom du processus concerné |
PID | Identifiant du processus |
TOTAL | Nombre total d’opérations IO |
READ | Nombre d’opérations de lecture |
WRITE | Nombre d’opérations d’écriture |
DIRTY | Données modifiées en attente d’écriture sur le disque |
DEVICES | Périphérique de stockage concerné |
Dans cet exemple, le processus jbd2/sda2-8 est le plus gourmand en écriture (151 opérations). Il s’agit du journal du système de fichiers ext4, ce qui est normal.
En revanche, lighttpd et vi consomment des IO, ce qui peut être intéressant à analyser.
🕵️ Méthode 2 : Utiliser lsof
pour voir les fichiers ouverts
Une fois qu’un processus suspect a été identifié, il est possible de voir les fichiers qu’il manipule avec la commande lsof
.
Par exemple, si lighttpd (PID 16720) consomme trop d’IO, on peut voir quels fichiers il manipule avec :
lsof -p 16720
Cela affichera tous les fichiers ouverts par le processus, permettant d’identifier si ce sont des logs, des bases de données ou d’autres fichiers volumineux.
⚡ Méthode 3 : Une alternative plus moderne avec iotop
Le script iodump
est puissant mais repose sur les logs du noyau, ce qui peut être intrusif. Une alternative plus moderne et interactive est d’utiliser iotop
.
👉 Installation d’iotop (si non installé) :
sudo apt install iotop # Debian/Ubuntu
sudo yum install iotop # CentOS/RHEL
👉 Exécution de la commande :
sudo iotop -o
💡 Pourquoi iotop
?
- Il affiche en temps réel les processus consommant le plus d’IO.
- L’option
-o
affiche uniquement les processus actifs. - Il est plus simple et ne nécessite pas d’activer
block_dump
.
🎯 Conclusion : Quelle méthode choisir ?
Méthode | Avantages | Inconvénients |
---|---|---|
iodump | Donne un historique des IO | Nécessite d’activer block_dump |
lsof | Permet d’identifier les fichiers manipulés | Ne montre pas l’impact exact sur le disque |
iotop | Plus moderne et interactif | Ne donne pas d’historique, uniquement en temps réel |
Si vous recherchez une analyse rapide et en temps réel, utilisez iotop.
Si vous avez besoin d’un rapport détaillé sur une période donnée, iodump
est une bonne option.
Enfin, pour voir quels fichiers sont ouverts, lsof
est l’outil idéal.
Avec ces outils, vous pourrez identifier et corriger les processus qui ralentissent votre serveur Linux en consommant trop d’IO. 🚀
📢 Et vous ?
Quels outils utilisez-vous pour surveiller la consommation d’IO sur vos serveurs Linux ? N'hésitez pas à rejoindre le serveur Discord Geeek.