GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Détermination du fichier spécifique responsable des E/S élevées ?

C'est un problème simple mais la première fois que j'ai eu à le résoudre :trouver quels fichiers/inodes spécifiques sont les cibles du plus grand nombre d'E/S. J'aimerais pouvoir avoir un aperçu général du système, mais si je dois donner un PID ou un TID, ça me va.

Je voudrais y aller sans avoir à faire de strace sur le programme qui apparaît dans iotop . De préférence, utiliser un outil dans la même veine que iotop mais celui qui détaille par fichier. Je peux utiliser lsof pour voir quels fichiers mailman a ouverts mais il n'indique pas quel fichier reçoit des E/S ni combien.

J'ai vu ailleurs où il était suggéré d'utiliser auditd mais je préférerais ne pas le faire car cela mettrait les informations dans nos fichiers d'audit, que nous utilisons à d'autres fins et cela semble être un problème que je devrais pouvoir rechercher de cette manière.

Le problème spécifique que j'ai en ce moment est que les instantanés LVM se remplissent trop rapidement. J'ai depuis résolu le problème, mais j'aurais aimé pouvoir le résoudre de cette façon plutôt que de simplement faire un ls sur tous les descripteurs de fichiers ouverts dans /proc/<pid>/fd pour voir lequel a connu la croissance la plus rapide.

Réponse acceptée :

Plusieurs aspects de cette question ont été partiellement traités par d'autres outils, mais il ne semble pas y avoir un seul outil qui offre toutes les fonctionnalités que vous recherchez.

iotop

Cet outil montre quels processus consomment le plus d'E/S. Mais il manque des options pour afficher des noms de fichiers spécifiques.

$ sudo iotop
Total DISK READ:       0.00 B/s | Total DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                        
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/u:0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]

Par défaut, il fait ce qui est normal top fait pour les processus en lice pour le temps du processeur, à l'exception des E/S de disque. Vous pouvez l'amadouer pour vous donner une vue de 30 000 pieds en utilisant le -a commutateur pour qu'il montre une accumulation par processus, au fil du temps.

$ sudo iotop -a
Total DISK READ:       0.00 B/s | Total DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                        
  258 be/3 root          0.00 B    896.00 K  0.00 %  0.46 % [jbd2/dm-0-8]
22698 be/4 emma          0.00 B     72.00 K  0.00 %  0.00 % chrome
22712 be/4 emma          0.00 B    172.00 K  0.00 %  0.00 % chrome
 1177 be/4 root          0.00 B     36.00 K  0.00 %  0.00 % cupsd -F
22711 be/4 emma          0.00 B    120.00 K  0.00 %  0.00 % chrome
22703 be/4 emma          0.00 B     32.00 K  0.00 %  0.00 % chrome
22722 be/4 emma          0.00 B     12.00 K  0.00 %  0.00 % chrome

i* outils (inotify, iwatch, etc.)

Ces outils permettent d'accéder aux événements d'accès aux fichiers, mais ils doivent être spécifiquement ciblés sur des répertoires ou des fichiers spécifiques. Ils ne sont donc pas très utiles lorsque vous essayez de retracer un accès à un fichier malveillant par un processus inconnu, lors du débogage de problèmes de performances.

Aussi le inotify framework ne fournit aucun détail sur les fichiers auxquels on accède. Seul le type d'accès, de sorte qu'aucune information sur la quantité de données échangées n'est disponible à l'aide de ces outils.

En relation:Linux - touches de remappage dur du clavier?

iostat

Affiche les performances globales (lectures et écritures) en fonction de l'accès à un périphérique donné (disque dur) ou à une partition. Mais ne fournit aucune indication sur les fichiers qui génèrent ces accès.

$ iostat -htx 1 1
Linux 3.5.0-19-generic (manny)  08/18/2013  _x86_64_    (3 CPU)

08/18/2013 10:15:38 PM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          18.41    0.00    1.98    0.11    0.00   79.49

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda
                  0.01     0.67    0.09    0.87     1.45    16.27    37.06     0.01   10.92   11.86   10.82   5.02   0.48
dm-0
                  0.00     0.00    0.09    1.42     1.42    16.21    23.41     0.01    9.95   12.22    9.81   3.19   0.48
dm-1
                  0.00     0.00    0.00    0.02     0.01     0.06     8.00     0.00  175.77   24.68  204.11   1.43   0.00

blktrace

Cette option est de niveau trop bas. Il manque de visibilité sur les fichiers et/ou les inodes auxquels on accède, juste les numéros de blocs bruts.

$ sudo blktrace -d /dev/sda -o - | blkparse -i -
  8,5    0        1     0.000000000   258  A WBS 0 + 0 <- (252,0) 0
  8,0    0        2     0.000001644   258  Q WBS [(null)]
  8,0    0        3     0.000007636   258  G WBS [(null)]
  8,0    0        4     0.000011344   258  I WBS [(null)]
  8,5    2        1 1266874889.709032673   258  A  WS 852117920 + 8 <- (252,0) 852115872
  8,0    2        2 1266874889.709033751   258  A  WS 852619680 + 8 <- (8,5) 852117920
  8,0    2        3 1266874889.709034966   258  Q  WS 852619680 + 8 [jbd2/dm-0-8]
  8,0    2        4 1266874889.709043188   258  G  WS 852619680 + 8 [jbd2/dm-0-8]
  8,0    2        5 1266874889.709045444   258  P   N [jbd2/dm-0-8]
  8,0    2        6 1266874889.709051409   258  I  WS 852619680 + 8 [jbd2/dm-0-8]
  8,0    2        7 1266874889.709053080   258  U   N [jbd2/dm-0-8] 1
  8,0    2        8 1266874889.709056385   258  D  WS 852619680 + 8 [jbd2/dm-0-8]
  8,5    2        9 1266874889.709111456   258  A  WS 482763752 + 8 <- (252,0) 482761704
...
^C
...
Total (8,0):
 Reads Queued:           0,        0KiB  Writes Queued:           7,       24KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:        3,       24KiB
 Reads Requeued:         0       Writes Requeued:         0
 Reads Completed:        0,        0KiB  Writes Completed:        5,       24KiB
 Read Merges:            0,        0KiB  Write Merges:            3,       12KiB
 IO unplugs:             2           Timer unplugs:           0

Throughput (R/W): 0KiB/s / 510KiB/s
Events (8,0): 43 entries
Skips: 0 forward (0 -   0.0%)

fatrace

Il s'agit d'un nouvel ajout au noyau Linux et bienvenu, donc ce n'est que dans les distributions plus récentes telles que Ubuntu 12.10. Mon système Fedora 14 en manquait 8-).

Il fournit le même accès que vous pouvez obtenir via inotify sans avoir à cibler un répertoire et/ou des fichiers particuliers.

$ sudo fatrace
pickup(4910): O /var/spool/postfix/maildrop
pickup(4910): C /var/spool/postfix/maildrop
sshd(4927): CO /etc/group
sshd(4927): CO /etc/passwd
sshd(4927): RCO /var/log/lastlog
sshd(4927): CWO /var/log/wtmp
sshd(4927): CWO /var/log/lastlog
sshd(6808): RO /bin/dash
sshd(6808): RO /lib/x86_64-linux-gnu/ld-2.15.so
sh(6808): R /lib/x86_64-linux-gnu/ld-2.15.so
sh(6808): O /etc/ld.so.cache
sh(6808): O /lib/x86_64-linux-gnu/libc-2.15.so

Ce qui précède vous montre l'ID de processus auquel le fichier accède et à quel fichier il accède, mais cela ne vous donne aucune utilisation globale de la bande passante, de sorte que chaque accès est indiscernable de tout autre accès.

Alors que faire ?

La fatrace l'option est la plus prometteuse pour ENFIN fournir un outil qui peut vous montrer l'utilisation globale des E/S de disque en fonction des fichiers auxquels vous accédez, plutôt que des processus qui y accèdent.

Références

  • fatrace :signaler les événements d'accès aux fichiers à l'échelle du système
  • fatrace - signale les événements d'accès aux fichiers à l'échelle du système
  • Une autre nouvelle ABI pour fanotify
  • Guide de l'utilisateur de blktrace

Linux
  1. grep récursivement pour un type de fichier spécifique sous Linux

  2. Linux :Existe-t-il quelque chose de similaire à top pour les E/S ?

  3. À quoi sert Linux test -a command test ?

  4. E/S de disque Linux OOM. Aussi :swap, à quoi ça sert ?

  5. Comment forcer des autorisations spécifiques pour les nouveaux fichiers/dossiers sur le serveur de fichiers Linux ?

Tutoriel de commande Linux df pour les débutants (8 exemples)

Tutoriel de commande Linux xz pour les débutants (7 exemples)

Tutoriel de commande de fichier Linux pour les débutants (5 exemples)

Commande ls sous Linux pour lister les fichiers

10 exemples iozone pour la mesure des performances d'E/S de disque sous Linux

Gestionnaire de fichiers Linux :20 meilleurs commentaires pour les utilisateurs Linux