GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿determinación del archivo específico responsable de la E/S alta?

Este es un problema simple, pero la primera vez que tuve que solucionarlo:encontrar qué archivos/inodos específicos son los objetivos de la mayoría de las E/S. Me gustaría poder obtener una descripción general del sistema, pero si tengo que dar un PID o TID, estoy de acuerdo con eso.

Me gustaría ir sin tener que hacer un strace en el programa que aparece en iotop . Preferiblemente, usando una herramienta en la misma línea que iotop pero uno que desglosa por archivo. Puedo usar lsof para ver qué archivos ha abierto Mailman, pero no indica qué archivo está recibiendo E/S ni cuánto.

He visto en otros lugares donde se sugirió usar auditd pero preferiría no hacerlo, ya que colocaría la información en nuestros archivos de auditoría, que usamos para otros fines y este parece ser un problema que debería poder investigar de esta manera.

El problema específico que tengo ahora es que las instantáneas de LVM se llenan demasiado rápido. Desde entonces, resolví el problema, pero me gustaría poder solucionarlo de esta manera en lugar de simplemente hacer un ls en todos los descriptores de archivos abiertos en /proc/<pid>/fd para ver cuál crecía más rápido.

Respuesta aceptada:

Hay varios aspectos de esta pregunta que se han abordado parcialmente a través de otras herramientas, pero no parece haber una sola herramienta que proporcione todas las funciones que está buscando.

iotop

Esta herramienta muestra qué procesos consumen más E/S. Pero carece de opciones para mostrar nombres de archivos específicos.

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

De forma predeterminada, hace lo que top normal lo hace para los procesos que compiten por el tiempo de la CPU, excepto para la E/S del disco. Puede persuadirlo para que le brinde una vista de 30,000 pies usando el -a cambiar para que muestre una acumulación por proceso, a lo largo del tiempo.

$ 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

herramientas i* (inotify, iwatch, etc.)

Estas herramientas brindan acceso a los eventos de acceso a archivos, sin embargo, deben estar dirigidas específicamente a directorios o archivos específicos. Por lo tanto, no son tan útiles cuando se trata de rastrear el acceso de un archivo no autorizado por un proceso desconocido, al depurar problemas de rendimiento.

También el inotify framework no proporciona ningún detalle sobre los archivos a los que se accede. Solo el tipo de acceso, por lo que no hay información disponible sobre la cantidad de datos que se mueven de un lado a otro con estas herramientas.

Relacionado:Linux:¿teclas de reasignación duras del teclado?

iostato

Muestra el rendimiento general (lecturas y escrituras) en función del acceso a un dispositivo determinado (disco duro) o partición. Pero no proporciona información sobre qué archivos están generando estos accesos.

$ 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

traza negra

Esta opción es de nivel demasiado bajo. Carece de visibilidad de a qué archivos y/o inodos se accede, solo números de bloque sin procesar.

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

rastro

Esta es una nueva adición al kernel de Linux y es bienvenida, por lo que solo está disponible en las distribuciones más nuevas, como Ubuntu 12.10. A mi sistema Fedora 14 le faltaba 8-).

Proporciona el mismo acceso que puede obtener a través de inotify sin tener que apuntar a un directorio y/o archivos en particular.

$ 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

Lo anterior le muestra la ID del proceso que está accediendo al archivo y a qué archivo está accediendo, pero no le brinda ningún uso general de ancho de banda, por lo que cada acceso es indistinguible de cualquier otro acceso.

Entonces, ¿qué hacer?

El fatrace opción es la más prometedora para FINALLY proporcionando una herramienta que puede mostrarle el uso agregado de E/S de disco en función de los archivos a los que se accede, en lugar de los procesos que realizan el acceso.

Referencias

  • fatrace:informe de eventos de acceso a archivos en todo el sistema
  • fatrace:informe de eventos de acceso a archivos en todo el sistema
  • Otra nueva ABI para fanotify
  • Guía del usuario de blktrace

Linux
  1. 10 prácticos alias de Bash para Linux

  2. Popsicle - Flasher de archivos USB múltiple para Linux

  3. Cómo deshabilitar un comando específico para un usuario específico en Linux

  4. ¿Cómo realizo E/S de bajo nivel en un archivo de dispositivo Linux en Python?

  5. Linux:¿Hay algo similar a top para E/S?

Tutorial de comando Linux df para principiantes (8 ejemplos)

Tutorial del comando Linux xz para principiantes (7 ejemplos)

Tutorial de comandos de archivos de Linux para principiantes (5 ejemplos)

Comando ls en Linux para listar archivos

10 ejemplos de iozone para la medición del rendimiento de E/S de disco en Linux

Administrador de archivos de Linux:los 20 principales revisados ​​por usuarios de Linux