GNU/Linux >> Znalost Linux >  >> Linux

Linux – Určení konkrétního souboru odpovědného za vysoké I/O?

Toto je jednoduchý problém, ale poprvé jsem ho musel skutečně opravit:zjistit, které konkrétní soubory/inody jsou cílem většiny I/O. Rád bych získal obecný přehled o systému, ale pokud musím zadat PID nebo TID, jsem s tím v pořádku.

Chtěl bych jet, aniž bych musel provádět strace v programu, který se objeví v iotop . Nejlépe pomocí nástroje ve stejném duchu jako iotop ale takový, který se rozepisuje podle souboru. Mohu použít lsof vidět, které soubory má poštář otevřené, ale neuvádí, který soubor přijímá I/O ani kolik.

Viděl jsem jinde, kde bylo navrženo použít auditd ale raději bych to neudělal, protože by to vložilo informace do našich auditních souborů, které používáme pro jiné účely, a to se zdá být problém, který bych měl být schopen prozkoumat tímto způsobem.

Konkrétní problém, který mám právě teď, je s příliš rychlým plněním snímků LVM. Od té doby jsem problém vyřešil, ale rád bych to dokázal vyřešit tímto způsobem, než abych dělal pouze ls na všech otevřených deskriptorech souborů v /proc/<pid>/fd abyste viděli, který z nich rostl nejrychleji.

Přijatá odpověď:

Existuje několik aspektů této otázky, které byly částečně vyřešeny prostřednictvím jiných nástrojů, ale zdá se, že neexistuje jediný nástroj, který by poskytoval všechny funkce, které hledáte.

iotop

Tento nástroj ukazuje, které procesy spotřebovávají nejvíce I/O. Chybí však možnosti pro zobrazení konkrétních názvů souborů.

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

Ve výchozím nastavení dělá to, co běžné top dělá pro procesy soupeřící o čas CPU, s výjimkou diskových I/O. Pomocí -a jej můžete přemluvit, aby vám poskytl výhled na 30 000 stop přepnout tak, aby ukazoval akumulaci podle procesu v průběhu času.

$ 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* nástroje (inotify, iwatch atd.)

Tyto nástroje poskytují přístup k událostem přístupu k souborům, ale musí být specificky zaměřeny na konkrétní adresáře nebo soubory. Nejsou tedy tak užitečné, když se pokoušíte vysledovat neoprávněný přístup k souboru neznámým procesem, při ladění problémů s výkonem.

Také inotify framework neposkytuje žádné podrobnosti o souborech, ke kterým se přistupuje. K dispozici je pouze typ přístupu, takže pomocí těchto nástrojů nejsou k dispozici žádné informace o množství dat přesouvaných tam a zpět.

Související:Linux – klávesy hard remap key?

iostat

Zobrazuje celkový výkon (čtení a zápisy) na základě přístupu k danému zařízení (pevnému disku) nebo oddílu. Neposkytuje však žádné informace o tom, které soubory generují tyto přístupy.

$ 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

Tato možnost je příliš nízká. Chybí mu přehled o tom, ke kterým souborům a/nebo inodům se přistupuje, pouze nezpracovaná čísla bloků.

$ 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

Toto je nový přírůstek do linuxového jádra a vítaný, takže je pouze v novějších distribucích, jako je Ubuntu 12.10. Můj systém Fedora 14 to postrádal 8-).

Poskytuje stejný přístup, jaký můžete získat prostřednictvím inotify aniž byste museli cílit na konkrétní adresář a/nebo soubory.

$ 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

Výše uvedené zobrazuje ID procesu, který přistupuje k souboru, a ke kterému souboru přistupuje, ale nedává vám žádné celkové využití šířky pásma, takže každý přístup je nerozeznatelný od jakéhokoli jiného přístupu.

Co tedy dělat?

fatrace možnost ukazuje nejslibnější pro KONEČNĚ poskytuje nástroj, který vám může ukázat agregované využití diskových I/O na základě souborů, ke kterým se přistupuje, spíše než procesů, které přistupují.

Odkazy

  • fatrace:hlášení událostí přístupu k souborům v celém systému
  • fatrace – hlásí události přístupu k souborům v celém systému
  • Další nové rozhraní ABI pro fanotify
  • Uživatelská příručka blktrace

Linux
  1. Jak provedu I/O nízké úrovně na souboru zařízení Linux v Pythonu?

  2. Chyba I/O v systému Linux:nelze odebrat adresář jako root

  3. Linux:Existuje něco podobného jako top pro I/O?

  1. K čemu je Linux test – příkazový test?

  2. Linux OOM disk I/O. Také:swap, k čemu je to dobré?

  3. Jak vynutím konkrétní oprávnění pro nové soubory/složky na souborovém serveru Linux?

  1. 10 praktických aliasů Bash pro Linux

  2. Příkaz wc pro Linux vysvětlený pro začátečníky (6 příkladů)

  3. Linux – Je možné předstírat konkrétní cestu pro proces?