Usando dtrace para diagnosticar problemas de I/O (Parte II)

jue 19 de junio del 2008

OpenSolaris Hace unos días escribí una pequeña introducción al uso de dtrace para diagnosticar problemas de I/O, en ella veíamos algunos ejemplos de "one liners " que nos pueden ser útiles en esta labor.

Sin embargo el administrador de sistemas puede no tener el conocimiento, o el tiempo necesario, para programar en D los scripts adecuados para obtener los datos que necesita. Aun así, afortunadamente, no tenemos que renunciar a la potencia de Dtrace ya que el Dtrace Toolkit (ver mini review) incluye varios ya hechos que muy posiblemente se adaptarán a nuestras necesidades, por lo que bastará con ejecutarlos para empezar a obtener información.

  • rwtop: Tremendamente útil, nos lista los procesos accediendo a disco ordenado por la cantidad de bytes escritos/leídos.
  • iotop: Muy parecido al anterior, aunque algo mas completo ya que incluye información acerca del dispositivo al que están accediendo los procesos.
  • iosnoop: saca un listado con los paths de los ficheros a los que están accediendo los distintos PIDs.
  • iofile.d: Parecido al anterior pero incluye un contador con lo que podemos calcular el tiempo que ha tardado cada acceso.
  • bitesize: Original por los datos que presenta, vemos el tamaño de las distintas operaciones de I/O de nuestro sistema, puede ser útil a la hora de diseñar nuevos sistemas de archivos.

Posted by Roger Jordan | Permalink | Categories: Opensolaris rss  | Añadir Comentarios, Total: 0

Ya se acerca el OpenSolaris Day

vie 13 de junio del 2008

OpenSolaris Day

Apenas queda una semana para que se celebre el OpenSolaris Day en la Universidad Complutense de Madrid. Un evento grande para la toda la comunidad OpenSource.

Podéis consultar aquí la agenda del evento.


Posted by Roger Jordan | Permalink | Categories: Opensolaris rss  | Añadir Comentarios, Total: 0

Usando dtrace para diagnosticar problemas de I/O

vie 06 de junio del 2008

Diagnosticar un problema de io siempre ha sido una tarea compleja. Las herramientas que disponen los distintos unix proporcionan datos a nivel de dispositivo o filesystem. Usando Solaris teníamos alguna ayuda extra usando truss, mdb, scat, ... sin embargo ninguna de ellas proporciona una respuesta rápida y sencilla a las preguntas que tiene un administrador de sistemas cuando se enfrenta a un problema de io

Que proceso es el que está generando el problema ?

Sobre que archivo esta escribiendo ?

Por fortuna OpenSolaris dispone de dtrace que puede proporcionarnos de forma sencilla las respuestas. Vamos a ver algunos ejemplos sencillos para diagnosticar la causa de un throughput alto de escritura.

Este comando nos lista la cantidad de bites escritos a disco por cada pid:

dtrace -n 'sysinfo:::writech { @dist[pid] = sum(arg0); }'

( Una vez identificado el pid origen del problema, el comando pfiles nos ayudará a identificar los ficheros a los que accede )

Sin embargo la carga de io puede ser debida a distintos procesos, así que quizás nos interese ver que archivos concentran el mayor número de accesos:

dtrace -n 'syscall::write:entry { @dist[fds[arg0].fi_pathname] = count(); }'

También nos puede interesar enfocar el diagnóstico de forma contraria, es decir, ver quien está accediendo a un fichero en concreto:

dtrace -q -n 'syscall::write:entry / fds[arg0].fi_pathname == "path_fichero" / { printf("Proceso %d \n", pid );}'

Como veis las posibilidades son casi infinitas, dtrace nos permite enfocar el diagnóstico desde la perspectiva que más nos interesa. Como última nota, tened en cuenta que los comandos anteriores pueden generar salidas bastante grandes en sistemas con bastante carga, así que sería aconsejable redirigirlas a un fichero y luego manipular los datos con nuestra herramienta favorita.


Posted by Roger Jordan | Permalink | Categories: Opensolaris rss  | Añadir Comentarios, Total: 0