¿Cómo puedo enumerar los principales archivos que consumen IO?

11

Mi software de gestión de documentos está haciendo mucho IO y me gustaría saber a qué archivos está accediendo más.

¿Existe una herramienta de Linux que me dé la lista de los principales archivos que consumen IO, como iotop pero para archivos, cada pocos segundos?

Eso podría verse así:

$ thetool
THRPUT   R/W/SWP FILE
40MB/s   write   /usr/alfresco/repo/1283421/1324928.doc
12MB/s   read    /usr/alfresco/cache/3928dh29f8if
11MB/s   read    /tmp/239398hf2f024f472.tmp

Busqué en las páginas del manual de iotop, lsof, stracey que no parecen ofrecer esta característica.

Nicolas Raoul
fuente
Podría escribir un postprocesador para obtener esta información de 'strace', pero que yo sepa, no existe tal herramienta. (Tal herramienta perdería operaciones que se llevaron a cabo a través de 'mmap'.)
David Schwartz

Respuestas:

2

Creo que su métrica "número de bytes" es la incorrecta. Considere dos accesos. Uno lee 10 MB de un archivo. El otro lee cada 512 bytes del archivo durante los primeros 10 MB. El "número de bytes" será 512 veces mayor para el primer acceso en comparación con el segundo. Sin embargo, ambos pondrán exactamente la misma carga en el subsistema de E / S.

Si puede aceptar "número de operaciones", que es casi tan bueno o tan malo como "número de bytes", entonces tiene algo que realmente puede medir. El inotifywatchprograma hace esto, y es probable que sea parte del inotify-toolspaquete de su distribución .

Le informará de inmediato qué archivos comprenden la mayor parte de los accesos, y probablemente le permitirá resolver su problema real.

David Schwartz
fuente
iotop usa MB / s como métrica, ¿está iotop mal? +1 para su sugerencia de inotifywatch, el ejemplo en la página de manual es EXACTAMENTE lo que necesito y lo que describí en mi pregunta. ¡Muchas gracias!
Nicolas Raoul
Correcto, pero 'iotop' no puede identificar archivos, solo bloquear dispositivos. Por lo tanto, podría ayudarlo a identificar el proceso del problema y / o el sistema de archivos / dispositivo del problema, pero no a qué archivos está accediendo. Puede que tenga que juntar piezas de diferentes herramientas.
David Schwartz
Hum, interesante, gracias! Estoy jugando con inotifywatch ahora, y comprobaré qué puedo hacer.
Nicolas Raoul
0

En primer lugar, para aclarar: no existe tal cosa como "archivos que consumen IO" . Los archivos son objetos pasivos. Son programas que activan IO (generalmente leyendo / escribiendo archivos) y pueden acceder a los archivos con mayor o menor frecuencia. Por lo tanto, el rendimiento que menciona con respecto a los archivos en realidad no tendría mucho sentido. Una información útil sobre los archivos podría ser la frecuencia con la que se accede y se modifica. Esto se puede monitorear usando notifywait -m /some/file/or/directory(desde las herramientas de inotify ) o algún sistema más complejo como FAM o Gamin .

rozcietrzewiacz
fuente
Describiría este "rendimiento" (otra palabra podría ser más apropiada, perdón por mi inglés) como la cantidad de bytes que se leen / escriben desde / a un archivo en particular durante un segundo (suma para cada proceso que accedió al archivo durante ese segundo). Espero que tenga más sentido. inotifywait, fam, gamin desafortunadamente solo me dice "El archivo X ha sido modificado / leído", que es interesante pero no lo que estoy buscando.
Nicolas Raoul