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