OpenSolaris: Java y Dtrace.
Introducción
Como administrador de sistemas nunca he tenido un especial cariño a las
aplicaciones java, la Virtual Machine (VM) se suele arrancar con unos
parámetros de memoria bastante generosos, esta se queda mapeada en el
kernel de forma que el gestor del sistema operativo queda de facto anulado
para esas páginas. A nivel de procesos la cosa es compleja, suele haber
un único proceso con muchos, digo muchísimos hilos, lo que a la
práctica significa que tratar de tracearlo con las herramientas
del tipo truss o dtruss es prácticamente inviable y identificar el hilo
que está generando más carga es complicado.
A cada nueva versión de la máquina virtual de sun (aka hotspot)
los desarrolladores
han hecho un esfuerzo para que sea cada vez más observable paliando
en gran medida los problemas descritos. Desde las
primeras versiones que eran bastantes opacas hasta la 1.5, que incluye
bastantes herramientas para el diagnóstico, ha mejorado
bastante en este aspecto.
En la última versión (java 1.6 SE) se ha incluido un provider
para Dtrace, de forma que podemos observar el comportamiento de aplicaciones
vivas de forma totalmente dinámica ... y se han ganado mi
corazón. :)
¡¡Algunas de estas pruebas generan bastante carga al sistema!! sed
cautelosos.
Por eso motivo debemos habilitarlas al arrancar nuestra VM con los flags:
-XX:+DTraceAllocProbes
-XX:+DTraceMethodProbes
-XX:+DTraceMonitorProbes
-XX:+ExtendedDTraceProbes
O bien cambiarlos dinámicamente con el comando
jinfo
El provider HotSpot
El provider hotspot se carga dinámicamente cuando se arranca un proceso
java, viene identificado por hotspot+(pid).
root@opensolaris:~# dtrace -ln 'hotspot*:::' | more
ID PROVIDER MODULE FUNCTION NAME
4762 hotspot2688 libjvm.so __1l[...]s_b_v_ class-loaded
4763 hotspot2688 libjvm.so __1c[...]anceKlass__v_ class-unloaded
4764 hotspot2688 libjvm.so __1cH[...]dbFpost_c compiled-method-load
[...]
Este provider nos proporciona probes para comprobar muchos aspectos de la
máquina virtual java. Podéis encontrar una descripción completa
de todas ellas en