¿Quieres dar formación sobre rendimiento en Solaris/OpenSolaris a tus técnicos?

A raíz del interés mostrado en las últimas charlas he decidido ofrecer mis servicios para consultoría y formación a empresas.

Ponte en contacto conmigo para pedir información.

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