Tengo estadísticas altas de io. Alto escribe. ¿Pero qué archivos se están escribiendo?

14
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          11.50    0.02    5.38    0.07    0.00   83.04

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdc               0.01    89.92    0.26   41.59     3.36   457.19    22.01     0.23    5.60   0.09   0.38
sdb               0.10    15.59    0.40   14.55     8.96   120.57    17.33     0.04    2.91   0.07   0.11
sda               0.13    45.37    0.96    8.09    20.06   213.56    51.63     0.02    2.64   0.16   0.14
sde               0.01    31.83    0.09   11.34     0.94   103.56    18.29     0.04    3.52   0.14   0.16
sdd               0.01    48.01    0.13   19.81     1.58   202.16    20.44     0.11    5.62   0.13   0.25

¿Hay alguna manera de saber qué archivos se están escribiendo? 457 kB / s

También esta otra máquina Linux tiene este mismo problema.

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          20.50    0.00   46.48   20.74    0.00   12.28

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.17    11.61    0.99    3.51    36.65    59.43    42.70     0.10   23.20   3.84   1.73
sdb               0.55   224.18   24.30   97.45   246.48  1287.12    25.19     3.96   32.53   7.88  95.91
sdd               0.53   226.75   25.56   90.96   283.50  1271.69    26.69     3.43   29.44   8.22  95.75
sdc               0.00     1.76    0.28    0.06     4.73     7.26    70.41     0.00   12.00   2.12   0.07
dm-0              0.00     0.00    1.11   14.77    36.41    58.92    12.01     1.00   62.86   1.09   1.74
dm-1              0.00     0.00    0.04    0.12     0.17     0.49     8.00     0.00   21.79   2.47   0.04
dm-2              0.00     0.00    0.01    0.00     0.05     0.01     8.50     0.00    7.90   2.08   0.00

1200 solicitudes de escritura por segundo para un servidor que no aloja nada

user4951
fuente

Respuestas:

8

Bueno, puedes probar los siguientes comandos que me funcionaron en RHEL6:

1) Cualquier dispositivo que vea en la salida "iostat" que realice más E / S, úselo con el fusercomando de la siguiente manera:

fuser -uvm device

2) Obtendrá una lista de procesos con el nombre de usuario que causa más E / S. Seleccione esos PIDS y úselos en el lsofcomando de la siguiente manera:

lsof -p PID | more

3) Obtendrá una lista de archivos / directorios junto con el usuario que realiza la E / S máxima.

Ravi Trivedi
fuente
root @ host [~] # fuser -uv / home4 root @ host [~] # fuser -uvm / home4 COMANDO DE ACCESO PID DE USUARIO / home4: newgames 18297 ..c .. (newgames) php cuntschi 18407 ..c .. ( cuntschi) php newgames 18457 ..c .. (newgames) php
user4951
5

Parece que no hay herramientas para averiguar el rendimiento de E / S por archivo que no sea dentro del proceso que usa el archivo. Pero hay formas de averiguar el rendimiento del proceso de E / S.

iotop: es una utilidad de tipo top / iftop que muestra el rendimiento del proceso de E / S.

Después de señalar con precisión qué proceso tiene E / S intensas, use el siguiente para averiguar qué archivo se está utilizando

lsof -c <process name>

Eso debería reducir el alcance y ayudar a señalar la fuente.

John Siu
fuente
¿Cómo obtener el proceso? Tampoco producen nada. Algo está escribiendo tantas cosas y no sé qué
user4951
Lo siento, puse la utilidad io incorrecta. Debería ser iotop, no iostat. Corrija mi respuesta.
John Siu
(1) ¿Puedes actualizar también qué distribución (redhat / centos / ubuntu ...) estás ejecutando? (2) ¿Es esta una instalación nueva? (3) ¿Algún intercambio de archivos como samba corriendo?
John Siu
3

Puede usar inotifywaitfrom inotify-toolspara averiguar exactamente en qué archivo se está escribiendo. Esto no le dirá cuántos datos se están escribiendo, pero al menos le dirá en qué archivos se están escribiendo a medida que sucede.

Como ejemplo, este comando imprimirá el nombre del archivo tan pronto como se cree, modifique o elimine alguno en /tmp:

$ sudo inotifywait -e modify -e attrib -e move -e create -e delete -m -r /tmp
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/tmp/ CREATE test
/tmp/ MODIFY test

Desafortunadamente, tendrá que adivinar en qué directorio contiene los archivos que se están escribiendo. Esto falla si intenta usarlo en el directorio raíz, aunque aparentemente eso se puede anular:

$ sudo inotifywait -e modify -e attrib -e move -e create -e delete -m -r /
Setting up watches.  Beware: since -r was given, this may take a while!
Failed to watch /; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'.
adittes
fuente
2

Use systemtap para monitorear cada llamada al sistema de escritura / escritura. Puede hacer un poco de contabilidad y verá qué archivo / fd obtiene la mayor cantidad de bytes.

Erben Mo
fuente