Estoy interesado en una utilidad o proceso para monitorear disco IO por archivo en CentOS.
En Win2008, la utilidad resmon permite este tipo de desglose, pero ninguna de las utilidades de Linux que he encontrado hace esto (iostat, iotop, dstat, nmon).
Mi interés en monitorear cuellos de botella de E / S en servidores de bases de datos. Con MSSQL, he encontrado un diagnóstico informativo para saber qué archivos / espacios de archivos están siendo los más afectados.
Respuestas:
SystemTap es probablemente su mejor opción.
Así es como se ve la salida del ejemplo iotime.stp :
La desventaja (aparte de la curva de aprendizaje) es que necesitará instalar kernel-debug , que puede no ser posible en un sistema de producción. Sin embargo, puede recurrir a la instrumentación cruzada donde compila un módulo en un sistema de desarrollo y ejecuta ese .ko en el sistema de producción.
O, si es impaciente, consulte el Capítulo 4. Scripts útiles de SystemTap de la guía para principiantes.
fuente
Script SystemTap * :
La salida se ve así:
O si elige mostrar solo la ruta desde el punto de montaje:
Limitaciones / errores:
devname
es"N/A"
devname
es"N/A"
Los resultados de los programas de Matthew Ife :
para mmaptest privado:
para mmaptest compartido:
para diotest (E / S directa):
* Instrucciones de configuración rápida para RHEL 6 o equivalente:
yum install systemtap
ydebuginfo-install kernel
fuente
task_dentry_path
) :-) No tengo idea de esa E / S, pero puedo probarlo si me das un comando o Un programa de muestra. Por ejemplo, usé Python para probar mmap.dd iflag=direct oflag=direct
aparece.Realmente querrás usar
blktrace
para esto. Consulte Visualizar Linux IO con Seekwatcher y blktrace .Veré si puedo publicar uno de mis ejemplos pronto.
Editar:
No menciona la distribución de Linux, pero quizás este sea un buen caso para un script dtrace en Linux o incluso System Tap , si está utilizando un sistema similar a RHEL.
fuente
La única herramienta que conozco que puede monitorear la actividad de E / S por archivo es
inotifywatch
. Es parte delinotify-tools
paquete. Desafortunadamente, solo te da recuentos de operaciones.fuente
use iotop para obtener los PID de los procesos que contribuyen con un alto IO
ejecute strace contra el PID que generó, verá a qué archivos está accediendo un proceso en particular
fuente
Finalmente usé Sysdig para esto
fuente
csysdig
, presione F2 y seleccioneFiles
ver. Verá la parte superior de los archivos accedidos por columna OPS (se puede cambiar presionando F9).csysdig -v files
va directamente a la vista "Archivos"Yo diría que podrías haber hecho la pregunta equivocada. Si está buscando cuellos de botella de E / S, puede ser tan importante ver lo que sucede en su disco. Los db son conocidos por hacer E / S aleatorias que pueden reducir significativamente el rendimiento, especialmente si solo tiene unos pocos cabezales.
lo que puede ser más interesante es ver si tiene largos tiempos de espera en los discos mismos. puede hacer esto con collectl mediante el comando "collectl -sD", que mostrará estadísticas de rendimiento de disco individuales. Are --home para convertirlo en una utilidad superior. Si hay muchos discos involucrados, ejecútelo a través de colmux: colmux -command "-sD" y le permitirá ordenar por una columna de su elección, incluso a través de múltiples sistemas.
fuente
Puede monitorear la E / S por dispositivo de bloque (a través de / proc / diskstats) y por proceso (io contabilidad a través de
/proc/$PID/io
o estadísticas de tareas ), pero no conozco una manera de hacerlo por archivo.fuente
Puede ser inotify resolverá resolver esto.
La API de inotify proporciona un mecanismo para monitorear eventos del sistema de archivos. Notify se puede usar para monitorear archivos individuales o para monitorear directorios. Cuando se supervisa un directorio, inotify devolverá eventos para el directorio en sí y para los archivos dentro del directorio.
Monitorear la actividad del sistema de archivos con inotify
Referencia de inotify
fuente
lsof
)Si bien hay mucha buena información en las respuestas aquí, me pregunto si es realmente aplicable.
Si está hablando de archivos en los 10s de gigabytes, en los que se escribe constantemente, a menos que sean archivos de registro o similares a los que se agregue constantemente (en cuyo caso solo supervise el tamaño de los archivos), es muy probable que los archivos sean mmap'd . Si ese es el caso, entonces la mejor respuesta puede ser que debe dejar de buscar la mayoría de las soluciones. Lo primero que debe preguntar sobre cualquier otra solución propuesta es "funciona con mmap", porque en su mayoría no funcionará. Sin embargo, es posible que pueda convertir el problema en un dispositivo de bloqueo en lugar de un archivo.
Cuando un programa solicita una página de un archivo mmap'd, solo hace referencia a una ubicación en la memoria virtual. Esa página podría o no estar ya en la memoria. Si no es así, eso genera un error de página, que desencadena la carga de la página desde el disco, pero eso ocurre dentro del sistema de memoria virtual, que no está fácilmente vinculado a un proceso de aplicación específico o a un archivo específico. De manera similar, cuando su aplicación actualiza una página mmap'd, dependiendo de los indicadores, es posible que no desencadene una escritura inmediata en el disco y, en algunos casos, no vaya al disco en absoluto (aunque presumiblemente esos últimos no son los casos que le interesan en).
Lo mejor que puedo pensar para los archivos mmap'd, si es viable para usted, es colocar cada uno de los archivos de interés en un dispositivo separado y usar las estadísticas del dispositivo para recopilar su información de uso. Podrías usar particiones lvm para esto. Sin embargo, un montaje de enlace no funcionará, ya que no crea un nuevo dispositivo de bloque.
Una vez que tenga sus archivos en dispositivos de bloque separados, puede obtener estadísticas de / sys / block / * o / proc / diskstats
Puede ser demasiado perjudicial presentar esto a un servidor de producción, pero tal vez pueda usarlo.
SI los archivos no están mapeados, entonces sí, puede elegir una de las otras soluciones aquí.
fuente
Recientemente estuve jugando con collectl , parece una gran herramienta y bastante sencilla de instalar. Lo más interesante es que puede averiguar cuál es el proceso responsable de los cuellos de botella de E / S. Te recomendaría que leas Usando Collectl , podría ser útil.
fuente
Le recomendaría que visite http://dag.wieers.com/home-made/dstat/ . Esta gran herramienta permite verificar muchas estadísticas.
fuente
Creo que iotop es una de las mejores herramientas en Linux para identificar cuellos de botella en IO.
fuente
iotop
no supervisa por archivo, funciona por proceso