Comment puis-je répertorier les principaux fichiers consommant des E / S?

11

Mon logiciel de gestion de documents fait beaucoup d'E / S et j'aimerais savoir à quels fichiers il accède le plus.

Existe-t-il un outil Linux qui me donnerait la liste des meilleurs fichiers consommant des IO, comme iotop mais pour les fichiers, toutes les quelques secondes?

Cela pourrait ressembler à:

$ thetool
THRPUT   R/W/SWP FILE
40MB/s   write   /usr/alfresco/repo/1283421/1324928.doc
12MB/s   read    /usr/alfresco/cache/3928dh29f8if
11MB/s   read    /tmp/239398hf2f024f472.tmp

Je regardais dans les pages de manuel iotop, lsof, straceet ils ne semblent pas offrir une telle fonctionnalité.

Nicolas Raoul
la source
Vous pouvez écrire un post-processeur pour obtenir ces informations de «strace», mais pour autant que je sache, un tel outil n'existe pas. (Un tel outil manquerait les opérations qui ont eu lieu via 'mmap'.)
David Schwartz

Réponses:

2

Je pense que votre métrique "nombre d'octets" est incorrecte. Considérez deux accès. On lit 10 Mo d'un fichier. L'autre lit tous les 512 octets du fichier pour les 10 premiers Mo. Le "nombre d'octets" sera 512 fois plus élevé pour le premier accès que pour le second. Pourtant, ils imposeront tous deux exactement la même charge au sous-système d'E / S.

Si vous pouvez accepter le "nombre d'opérations", qui est à peu près aussi bon ou aussi mauvais que le "nombre d'octets", alors vous avez quelque chose que vous pouvez réellement mesurer. Le inotifywatchprogramme fait cela, et il fait probablement partie du inotify-toolspackage de votre distribution .

Il vous indiquera immédiatement quels fichiers constituent la majeure partie des accès, et il vous permettra probablement de résoudre votre problème réel.

David Schwartz
la source
iotop utilise MB / s comme métrique, est-ce que iotop a tort? +1 pour votre suggestion inotifywatch, l'exemple dans la page de manuel est EXACTEMENT ce dont j'ai besoin et ce que j'ai décrit dans ma question. Merci beaucoup!
Nicolas Raoul
C'est vrai, mais 'iotop' ne peut pas identifier les fichiers, seulement bloquer les appareils. Cela peut donc vous aider à identifier le processus problématique et / ou le système de fichiers / périphérique problématique, mais pas les fichiers auxquels il accède. Vous devrez peut-être assembler des pièces à partir d'outils différents.
David Schwartz
Hum, intéressant, merci! Je joue avec inotifywatch maintenant et je vais vérifier ce que je peux faire.
Nicolas Raoul
0

Tout d'abord, pour clarifier: il n'existe pas de «fichiers consommant des entrées / sorties» . Les fichiers sont des objets passifs. Ce sont des programmes qui déclenchent les E / S (généralement en lisant / écrivant des fichiers) et ils peuvent accéder aux fichiers plus ou moins souvent. Ainsi, le débit que vous mentionnez en ce qui concerne les fichiers n'aurait en fait pas beaucoup de sens. Une information utile concernant les fichiers pourrait être la fréquence à laquelle ils sont consultés et modifiés. Cela peut être contrôlé à l'aide notifywait -m /some/file/or/directory(à partir d' outils inotify ) ou d'un système plus complexe comme FAM ou Gamin .

rozcietrzewiacz
la source
Je décrirais ce "débit" (un autre mot pourrait être plus approprié, désolé pour mon anglais) comme la quantité d'octets qui sont lus / écrits depuis / vers un fichier particulier pendant une seconde (somme pour chaque processus qui a accédé au fichier pendant cette seconde). J'espère que cela a plus de sens. inotifywait, fam, gamin ne me disent malheureusement que "Le fichier X a été modifié / lu" ce qui est intéressant mais pas ce que je recherche.
Nicolas Raoul