GNU/Linux >> Linux Esercitazione >  >> Linux

Linux – Determinazione di file specifici responsabili di I/o elevati?

Questo è un problema semplice ma è la prima volta che ho dovuto risolverlo effettivamente:trovare quali file/inode specifici sono gli obiettivi della maggior parte degli I/O. Mi piacerebbe avere una panoramica generale del sistema, ma se devo fornire un PID o un TID sono a posto.

Vorrei andare senza dover fare una strace sul programma che compare in iotop . Preferibilmente, utilizzando uno strumento simile a iotop ma uno che dettaglia per file. Posso usare lsof per vedere quali file ha aperto mailman ma non indica quale file sta ricevendo I/O o quanto.

Ho visto altrove dove è stato suggerito di usare auditd ma preferirei non farlo poiché metterebbe le informazioni nei nostri file di audit, che utilizziamo per altri scopi e questo sembra un problema che dovrei essere in grado di ricercare in questo modo.

Il problema specifico che ho in questo momento è con le istantanee LVM che si riempiono troppo rapidamente. Da allora ho risolto il problema, ma mi piacerebbe essere in grado di risolverlo in questo modo piuttosto che eseguire semplicemente un ls su tutti i descrittori di file aperti in /proc/<pid>/fd per vedere quale stava crescendo più velocemente.

Risposta accettata:

Ci sono diversi aspetti di questa domanda che sono stati affrontati in parte attraverso altri strumenti, ma non sembra esserci un unico strumento che fornisce tutte le funzionalità che stai cercando.

iotop

Questo strumento mostra quali processi stanno consumando più I/O. Ma mancano le opzioni per mostrare nomi di file specifici.

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

Per impostazione predefinita fa ciò che il normale top fa per i processi in lizza per il tempo della CPU, ad eccezione dell'I/O del disco. Puoi convincerlo a darti una vista di 30.000 piedi usando il -a interruttore in modo che mostri un accumulo per processo, nel tempo.

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

Questi strumenti forniscono l'accesso agli eventi di accesso ai file, tuttavia devono essere mirati in modo specifico a directory o file specifici. Quindi non sono così utili quando si tenta di rintracciare un accesso non autorizzato a un file da parte di un processo sconosciuto, durante il debug di problemi di prestazioni.

Anche inotify framework non fornisce alcun dettaglio sui file a cui si accede. Solo il tipo di accesso, quindi non sono disponibili informazioni sulla quantità di dati spostati avanti e indietro, utilizzando questi strumenti.

Correlati:Linux – tasti di rimappatura hard della tastiera?

iostato

Mostra le prestazioni complessive (letture e scritture) in base all'accesso a un determinato dispositivo (disco rigido) o partizione. Ma non fornisce informazioni dettagliate su quali file stanno generando questi accessi.

$ 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

traccia nera

Questa opzione è di livello troppo basso. Manca di visibilità su quali file e/o inode sono a cui si accede, solo numeri di blocco grezzi.

$ 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%)

Frace

Questa è una nuova aggiunta al kernel Linux e benvenuta, quindi è solo nelle distribuzioni più recenti come Ubuntu 12.10. Il mio sistema Fedora 14 ne era privo 8-).

Fornisce lo stesso accesso che puoi ottenere tramite inotify senza dover scegliere come target una directory e/o file particolari.

$ 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

Quanto sopra ti mostra l'ID del processo che sta eseguendo l'accesso al file e a quale file sta accedendo, ma non ti dà alcun utilizzo complessivo della larghezza di banda, quindi ogni accesso è indistinguibile da qualsiasi altro accesso.

Quindi cosa fare?

La fatrace l'opzione mostra la più promettente per FINALMENTE fornendo uno strumento in grado di mostrare l'utilizzo aggregato dell'I/O del disco in base ai file a cui si accede, piuttosto che ai processi che effettuano l'accesso.

Riferimenti

  • fatrace:segnala gli eventi di accesso ai file a livello di sistema
  • fatrace:segnala gli eventi di accesso ai file a livello di sistema
  • Un altro nuovo ABI per fanotify
  • Guida per l'utente di blktrace

Linux
  1. grep in modo ricorsivo per un tipo di file specifico su Linux

  2. Errore I/O su Linux:impossibile rimuovere la directory come root

  3. Linux:esiste qualcosa di simile a top per I/O?

  4. A cosa serve il test di Linux:un test di comando?

  5. I/O su disco Linux OOM. Inoltre:scambia, a cosa serve?

Linux df Command Tutorial per principianti (8 esempi)

Linux xz Command Tutorial per principianti (7 esempi)

Tutorial sui comandi di file Linux per principianti (5 esempi)

Comando ls in Linux per elencare i file

10 esempi di iozone per la misurazione delle prestazioni di I/O del disco su Linux

Gestione file Linux:Top 20 recensiti per utenti Linux