GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Bestimmung einer bestimmten Datei, die für hohe E/A verantwortlich ist?

Dies ist ein einfaches Problem, aber das erste Mal, dass ich es tatsächlich beheben musste:Herausfinden, welche spezifischen Dateien/Inodes die Ziele der meisten E/A sind. Ich hätte gerne einen allgemeinen Systemüberblick, aber wenn ich eine PID oder TID angeben muss, bin ich damit einverstanden.

Ich möchte gehen, ohne einen strace machen zu müssen auf dem Programm, das in iotop erscheint . Verwenden Sie am besten ein Tool im Stil von iotop aber eine, die nach Datei auflistet. Ich kann lsof verwenden um zu sehen, welche Dateien Mailman geöffnet hat, aber es zeigt nicht an, welche Datei E/A empfängt oder wie viel.

Ich habe an anderer Stelle gesehen, wo vorgeschlagen wurde, auditd zu verwenden aber ich würde es vorziehen, dies nicht zu tun, da dies die Informationen in unsere Audit-Dateien aufnehmen würde, die wir für andere Zwecke verwenden, und dies scheint ein Problem zu sein, das ich auf diese Weise untersuchen sollte.

Das spezifische Problem, das ich gerade habe, ist, dass LVM-Snapshots zu schnell gefüllt werden. Ich habe das Problem inzwischen gelöst, hätte es aber gerne auf diese Weise behoben, anstatt nur ein ls zu machen auf alle offenen Dateideskriptoren in /proc/<pid>/fd um zu sehen, welches am schnellsten gewachsen ist.

Akzeptierte Antwort:

Es gibt mehrere Aspekte dieser Frage, die teilweise durch andere Tools behandelt wurden, aber es scheint kein einzelnes Tool zu geben, das alle Funktionen bietet, nach denen Sie suchen.

iotop

Dieses Tool zeigt, welche Prozesse die meisten E/A verbrauchen. Aber es fehlen Optionen, um bestimmte Dateinamen anzuzeigen.

$ 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]

Standardmäßig macht es das, was normal top ist für Prozesse, die um die Zeit der CPU konkurrieren, mit Ausnahme von Festplatten-I/O. Sie können es überreden, Ihnen eine 30.000-Fuß-Ansicht zu geben, indem Sie den -a verwenden so umschalten, dass eine Akkumulation nach Prozess im Laufe der Zeit angezeigt wird.

$ 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*-Tools (inotify, iwatch usw.)

Diese Tools bieten Zugriff auf die Dateizugriffsereignisse, müssen jedoch speziell auf bestimmte Verzeichnisse oder Dateien ausgerichtet sein. Daher sind sie nicht so hilfreich, wenn versucht wird, einen Rogue-Dateizugriff durch einen unbekannten Prozess aufzuspüren, wenn Leistungsprobleme behoben werden.

Auch die inotify Framework macht keine Angaben über die Dateien, auf die zugegriffen wird. Mit diesen Tools ist nur die Art des Zugriffs verfügbar, also keine Informationen über die Datenmenge, die hin und her verschoben wird.

Verwandt:Linux – Tastatur-Hard-Remap-Tasten?

iostat

Zeigt die Gesamtleistung (Lese- und Schreibvorgänge) basierend auf dem Zugriff auf ein bestimmtes Gerät (Festplatte) oder Partition an. Gibt aber keinen Einblick, welche Dateien diese Zugriffe generieren.

$ 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

Diese Option ist zu niedrig. Es fehlt die Sichtbarkeit, auf welche Dateien und/oder Inodes zugegriffen wird, nur rohe Blocknummern.

$ 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

Dies ist eine neue Ergänzung des Linux-Kernels und eine willkommene, also nur in neueren Distributionen wie Ubuntu 12.10. Meinem Fedora 14-System fehlte es 8-).

Es bietet denselben Zugriff, den Sie über inotify erhalten ohne auf ein bestimmtes Verzeichnis und/oder Dateien abzielen zu müssen.

$ 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

Das Obige zeigt Ihnen die Prozess-ID, die auf die Datei zugreift, und auf welche Datei zugegriffen wird, aber es gibt Ihnen keine allgemeine Bandbreitennutzung, sodass jeder Zugriff von keinem anderen Zugriff zu unterscheiden ist.

Also was tun?

Die fatrace Option ist für ENDLICH am vielversprechendsten Bereitstellung eines Tools, das Ihnen die aggregierte Nutzung der Festplatten-E/A basierend auf den Dateien, auf die zugegriffen wird, und nicht auf den Prozessen, die den Zugriff durchführen, anzeigen kann.

Referenzen

  • fatrace:systemweite Dateizugriffsereignisse melden
  • fatrace – meldet systemweite Dateizugriffsereignisse
  • Noch ein neues ABI für fanotify
  • blktrace-Benutzerhandbuch

Linux
  1. 10 praktische Bash-Aliase für Linux

  2. So deaktivieren Sie einen bestimmten Befehl für einen bestimmten Benutzer in Linux

  3. grep rekursiv für einen bestimmten Dateityp unter Linux

  4. E/A-Fehler unter Linux:Verzeichnis kann nicht als Root entfernt werden

  5. Wie erzwinge ich bestimmte Berechtigungen für neue Dateien/Ordner auf dem Linux-Dateiserver?

Linux-df-Befehls-Tutorial für Anfänger (8 Beispiele)

Linux xz Command Tutorial für Anfänger (7 Beispiele)

Tutorial für Linux-Dateibefehle für Anfänger (5 Beispiele)

ls-Befehl in Linux zum Auflisten von Dateien

10 iozone-Beispiele für die Messung der Festplatten-E/A-Leistung unter Linux

Linux-Dateimanager:Top 20 für Linux-Benutzer überprüft