image

Vous êtes nombreux à avoir votre serveur Web sous Linux, et vous vous demandez probablement comment trouver les processus qui consomment des IO (lecture / écriture disque) ?

Je me suis posé la même question cet après-midi et j'ai trouvé un petit script perl qui m'a permis de trouver le processus coupable des consommations en IO de mon serveur.

La première étape consiste à activer les messages du kernel concernant les IO :


echo 1 > /proc/sys/vm/block_dump

La deuxième étape consiste à récupérer le script perl "iodump" :


wget http://aspersa.googlecode.com/svn/trunk/iodump 

Il suffit ensuite de l'exécuter :


while true; do sleep 1; dmesg -c; done | perl iodump

Un Control+C vous générera une synthèse des processus qui consomment des IO.

^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

Le script vous génère une liste des processus utilisant le plus le disque dur de votre serveur.
Il faut maintenant comprendre l'origine de ces IO au sein du processus, un "lsof" avec le PID du processus vous donnera des informations sur les fichiers ouverts par celui-ci.