2008-10-30 17 views
14

Sur un serveur Debian particulier, iostat (et similaire) signale un volume inattendu (en octets) d'écritures sur disque en cours. J'ai du mal à savoir quel processus fait ces écritures.Comment puis-je enregistrer le processus ou l'activité du noyau utilisant le disque dans GNU/Linux?

Deux points intéressants:

  1. J'ai essayé de désactiver les services système une à la fois en vain. L'activité du disque reste assez constante et étonnamment élevée.

  2. Malgré l'écriture, ne semble pas consommer plus d'espace global sur le disque.

Ces deux me font penser que l'écriture peut être quelque chose que le noyau est en train de faire, mais je ne suis pas l'échange, il est donc pas clair pour moi ce que Linux pourrait essayer d'écrire.

pourrait essayer au-dessus:

http://www.atcomputing.nl/Tools/atop/

mais voudrais éviter patcher mon noyau.

Des idées sur la façon de traquer cela?

Répondre

0

Vous pouvez essayer d'utiliser SystemTap, il a beaucoup d'exemples, et si je ne me trompe pas, il montre comment faire ce genre de chose.

1

Vous pouvez utiliser la commande UNIX lsof (lister les fichiers ouverts). Cela imprime le processus, l'ID de processus, l'utilisateur pour tout fichier ouvert.

2

Vous pouvez rechercher iotop pour Linux. Il y a des versions de Solaris qui circulent, mais il y a un paquet Debian par exemple.

3

Si vous utilisez un noyau plus récent que 2.6.20, c'est très facile, car c'est la première version du noyau Linux qui inclut la comptabilité d'E/S. Si vous compilez votre propre noyau, assurez-vous d'inclure:

CONFIG_TASKSTATS=y 
CONFIG_TASK_IO_ACCOUNTING=y 

Noyaux de paquets Debian comprennent déjà ces drapeaux, donc il n'y a pas besoin de recompiler le noyau. L'utilitaire standard pour accéder aux données de comptabilité d'E/S en temps réel est iotop (1). Il vous donne une liste complète des processus gérés par le planificateur d'E/S et affiche les statistiques par processus pour la bande passante d'E/S totale en lecture, en écriture et totale.

16

iotop est bon (excellent, en fait).

Si vous avez un noyau datant d'avant 2.6.20, vous ne pouvez pas utiliser la plupart de ces outils.

Au lieu de cela, vous pouvez essayer les éléments suivants (qui devrait fonctionner pour presque tous les noyaux 2.6 IIRC):

  
sudo -s 
dmesg -c 
/etc/init.d/klogd stop 
echo 1 > /proc/sys/vm/block_dump 
rm /tmp/disklog 
watch "dmesg -c >> /tmp/disklog" 
    CTRL-C when you're done collecting data 
echo 0 > /proc/sys/vm/block_dump 
/etc/init.d/klogd start 
exit (quit root shell) 

cat /tmp/disklog | awk -F"[() \t]" '/(READ|WRITE|dirtied)/ {activity[$1]++} END {for (x in activity) print x, activity[x]}'| sort -nr -k2 

Les lignes dmesg -c effacer votre journal du noyau. L'enregistreur est ensuite éteint, manuellement (à l'aide de la montre) transféré sur un disque (le tampon mémoire est petit, ce qui explique pourquoi nous devons le faire). Laisser tourner pendant environ cinq minutes ou plus, puis CTRL-c le processus de surveillance. Après avoir fermé la journalisation et redémarré klogd, analysez les résultats en utilisant le peu de awk à la fin.

+0

Une raison pour laquelle root ne serait pas capable d'exécuter 'echo 1>/proc/sys/vm/block_dump' avec l'erreur suivante "bash: echo: erreur d'écriture: Opération non autorisée"? Ceci est un environnement virtualisé, donc je suppose que c'est pourquoi ... :( –

+5

Je n'ai jamais essayé sur un système virtualisé Si vous utilisez sudo, sachez que vous ne pouvez pas faire sudo echo 1>/proc/sys/vm/block_dump, parce que seul l'écho est sudoed, pas la redirection Vous devez faire sudo bash -c "echo 1>/proc/sys/vm/block_dump" – Mikeage

1

Vous pouvez également utiliser htop, en activant la colonne IO_RATR. Htop est un excellent remplaçant.