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.
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