Usando dtrace para diagnosticar problemas de I/O (Parte II)
jue 19 de junio del 2008
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.
Ya se acerca el OpenSolaris Day
vie 13 de junio del 2008
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.
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.
