Posts Tagged ‘dtrace’

DTrace tip

23 Mayo,2009

Si utilizáis alguna vez DTrace con NetBeans (plugin disponible en el respositorio de actualizaciones) o D-Light en Sun Studio Express, y os suelta el siguiente error:

failed to create probe in process 787: Not enough space

Abrid una consola y con permisos de superusuario modificamos el fichero /kernel/drv/fasttrap.conf, descomentamos y cambiamos el siguiente valor a 1000000:

fasttrap-max-probes=1000000;

Sobre todo suele suceder con NetBeans en las versiones Developer Preview.

Plugin de DTrace actualizado en Netbeans y Sun Studio

6 Agosto,2008

Ya está disponible la versión 0.4 del plugin de DTrace GUI en el Update Center de NetBeans.

El plugin DTrace GUI para NetBeans es una interfaz gráfica de usuario (GUI) para instrumentación con DTrace (incluído en Solaris 10 y OpenSolaris) y puede ser instalado en los entornos de desarrollo NetBeans (versiones 6.0, 6.1 y 6.5) y Sun Studio 12.

Podemos crear, editar y ejecutar scripts escritos en lenguaje D desde la interfaz gráfica, incluso los que ya están escritos y/o incluídos en shellscripts. De hecho, el plugin DTrace GUI puede ejecutar los que están empaquetados en el DTraceToolkit, una coleccion muy útil y documentada de scripts en D, creada por la comunidad de DTrace.

El editor de scripts aún está en fase de desarrollo y se espera en un futuro muy próximo que estén implementadas las características de sintaxis coloreada, folding y completación de código, entre otras.

La novedad más importante de ésta versión es que podemos ver la salida de DTrace a través de la herramienta gráfica Chime, ya que ahora se encuentra integrada dentro del propio entorno de desarrollo. Recordemos que Chime representa gráficamente (a través de displays) los datos recogidos por DTrace, ofreciéndonos así la capacidad de observar minuciosamente un sistema en tiempo real.

Si además tenemos una versión reciente de la consolidación O/N (kernel,etc), podremos hacer tunning y depuración de aplicaciones escritas en C/C++, Java, JavaScript, PHP, Ruby, Python, etc. No lo he probado con los nuevos IP providers de DTrace, pero seguramente también podrían implementarse nuevos displays en Chime.

Para instalar éste plugin (sólo en Solaris 10 y OpenSolaris), arrancamos NetBeans o Sun Studio y buscaremos nuevas actualizaciones a través del menu Tools->Plugins, marcando la casilla correspondiente de DTrace. Si ya teníamos instalado previamente el plugin (anteriormente v0.2) , nos actualizará automáticamente a la version más nueva.

Existe otro plugin de instrumentación bastante interesante llamado D-Light -sólo disponible para Sun Studio- que nos permite también en modo gráfico, utilizar numerosos instrumentos para analizar el comportamiento de nuestras aplicaciones. Aunque su funcionalidad es todavía bastante limitada, éste plugin va aún más lejos y nos permite hacer algunas acciones realmente increíbles con DTrace. Si conocéis Instruments de las Developers Tools de MacOSX, el proyecto D-Light va en ese camino; pero como ya he dicho, falta mucho por hacer y características por activar. Por poner un ejemplo, en éstos momentos D-Light no nos deja attachearnos a un proceso concreto y la lista de instrumentos es limitada.

En los próximos días escribiré un post más extenso sobre ambos plugins, ya que los utilizo muchísimo en mis proyectos y creo que podría ser interesante compartirlo aquí para todos.

Hasta entonces, prueba ahora el nuevo plugin de DTrace para NetBeans, consulta la documentación y talleres de la comunidad y cuéntanos qué te parece :-)


DTrace en Mac OSX Leopard

20 Enero,2008

En el post anterior hablábamos del funcionamiento experimental de ZFS en Mac OSX Leopard, hoy lo haremos sobre DTrace, una tecnología de instrumentación / debugging a bajo nivel del sistema que se estrenó en OpenSolaris hace ya casi 3 años. Pero, qué es DTrace y para qué nos sirve?

DTrace es una herramienta introducida en el Sistema Operativo Solaris 10 que nos puede ayudar a depurar problemas sistemáticos y/o difíciles de diagnosticar con las herramientas y mecanismos tradicionales. A través de la linea de comandos y de un lenguaje de scripting llamado “D”, DTrace nos ofrece una vista comprensible del comportamiento del sistema operativo (kernel y librerías del sistema por citar algunas partes del OS) y de las aplicaciones que se ejecutan sobre él.

Realmente realiza funciones similares a otras herramientas mas conocidas en Solaris, como por ejemplo truss, apptrace, prex y mdb. Sin embargo, DTrace integra todas sus funcionalidades en una única y poderosa herramienta, ‘dtrace‘ , que examina la actividad de usuario y del kernel de Solaris.

Hoy en día DTrace está considerada como la única herramienta disponible que es lo suficientemente segura para utilizarla en sistemas de producción (sistemas que funcionan sin reiniciar en mucho tiempo y que necesitan su disponibilidad 24×7) y además con un impacto insignificante en el rendimiento, llegando a un 0% de consumo de CPU cuando no se emplea.

DTrace fue el primer mayor componente del código de Solaris 10 que fue abierto a la comunidad opensource y que posteriormente fué adoptado por Apple para su inclusión en Mac OS X Leopard.

Para saber más, podéis consultar una presentación en castellano sobre DTrace en la página de la comunidad Hispana de OpenSolaris, en la página de Sun sobre DTrace, o en éste estupendo articulo de DTrace en Leopard.

Así pues, si abrimos un Terminal en OSX y nos autenticamos como root (o utilizando sudo, tendremos acceso a dtrace y a todas sus funcionalidades.

Después de consultar algunos post sobre DTrace en Leopard y de jugar un poco con los probes, me dí cuenta (realmente lo habia leído ya) de que había una aplicación que no se mostraba en la lista de procesos. Tenia arrancado Finder (obviamente), Mail, Safari, iTunes (escuchando el podcast del Geek Errante) y Transmission, entre otros procesos. Pero sorprendentemente, iTunes no salía en dicha lista, por mucho que me enganchara al proceso y utilizara otros probes:

sh-3.2# dtrace -n profile-1000'{ @[execname] = count(); }'
dtrace: description 'profile-1000' matched 1 probe
^C

notifyd 1
sshd 1
configd 3
fseventsd 4
GrowlHelperApp 9
DirectoryServic 13
ntpd 19
mds 21
Dock 34
dtrace 37
update 45
Mail 62
SystemUIServer 71
Finder 95
WindowServer 196
Transmission 763
Safari 1254
kernel_task 5090

Realizando un sencillo script para comprobar llamadas al sistema, únicamente Finder, Mail y Transmission sacaron los resultados esperados, sin embargo, aplicando el mismo script a los PID de iTunes o a Safari, no dieron ningún resultado.

Abrimos un editor de textos y escribimos lo siguiente:

pid$1:::entry /* Probamos las funciones del proceso unicamente */
{
@[probefunc]=count();
}

Guardamos el script como prueba.d y ahora vamos a listar los PID de iTunes y Safari:
sh-3.2# ps -aef | grep -i Safari.app
501 2410 109 0 3:26.63 ?? 14:15.25 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_2171410
sh-3.2# ps -aef | grep -i iTunes.app | grep -v iTunesHelper | grep -v grep
501 3704 109 0 0:17.81 ?? 0:58.62 /Applications/iTunes.app/Contents/MacOS/iTunes -psn_0_3060459

Ahora ejecutamos el script sobre los PID de Safari o de iTunes (mientras, cambia de canción o haz algo con la aplicacion iTunes o navega un poco con Safari):

sh-3.2# dtrace -qs prueba.d 109
^C
sh-3.2#

No aparece absolutamente nada. Aplicad el mismo proceso contra el PID de Finder o de otra aplicación y veréis como aparecen literalmente, cientos de llamadas al sistema. Si hacemos la prueba contra Safari, veremos que ocurre lo mismo, solo que encima -al menos en mis pruebas- uno de los cores de la CPU se puso al 100% y Safari tardaba muchísimo en recargar la página que le había ordenado. Supuestamente DTrace no debería producir este comportamiento, aunque también es verdad que la prueba que le hemos ordenado es un poco salvaje.

Consultando ésta entrada de Adam Leventhal, uno de los desarrolladores de DTrace en Sun, nos encontramos con que efectivamente Apple ha neutralizado la capacidad de realizar probes en alguna de sus aplicaciones.

Parece que a Apple no le gusta que miremos como funcionan sus aplicaciones por dentro…

DTrace en NetBeans

6 Noviembre,2007

DTrace Plugin añade a NetBeans la posibilidad de ejecutar, crear y modificar código en scripts escritos en lenguaje D, propio de DTrace. Además podremos utilizar nuevos proveedores dtrace para aplicaciones en Java, JavaScript, Perl, Python, Php, Ruby, shell y Tcl.

Un buen comienzo para aprender el lenguaje D es el DTrace Toolkit, cuyos scripts se incluyen en las últimas versiones de SXDE. La ruta a éstos scripts es /usr/demo/dtrace

Si eres desarrollador, ésta es otra poderosa razón para pasarse al binomio OpenSolaris/NetBeans, pues el plugin sólo funciona en sistemas OpenSolaris y Solaris 10.