Contenido


5 cosas que no sabía sobre la ... supervisión del rendimiento de Java, Parte 1

Perfil de rendimiento de Java con JConsole y VisualVM

Comments

Cuando el rendimiento de la aplicación sufre, la mayoría de los desarrolladores sienten pánico, y con razón. Realizar el seguimiento del origen de los cuellos de botella de las aplicaciones Java ha sido históricamente muy pesado, porque Java virtual machine tiene un efecto de caja negra, y porque las herramientas de creación de perfiles para la plataforma Java tradicionalmente no han cubierto las expectativas.

Todo esto cambió con la introducción de JConsole en Java 5, sin embargo. JConsole es un perfilador integrado de rendimiento de Java que funciona desde la línea de comandos y en una GUI Shell. No es perfecto, pero es una más que adecuada primera línea de defensa cuando asoma la cabeza puntiaguda del jefe con un problema de rendimiento, — y es mucho mejor que consultar a Papa Google.

En esta edición de las series de 5 cosas , le mostraré cinco maneras fáciles de utilizar JConsole (o su visualmente sofisticado primo, VisualVM) para supervisar el rendimiento de aplicaciones Java y realizar un seguimiento de los cuellos de botella en el código Java.

1. El JDK se cambia con un perfilador

Muchos desarrolladores de Java no se dan cuenta de que se ha incluido una herramienta perfiladora en el JDK desde Java 5. JConsole (o, para releases más recientes de la plataforma Java, VisualVM) es un perfilador integrado que es tan fácil de lanzar como el compilador de Java. Desde un prompt de comandos que tenga JDK en el PATH, sólo ejecute jconsole.. Desde GUI shell, navegue al directorio de instalación del JDK, abra la carpeta bin, y haga doble clic en jconsole.

Cuando la herramienta perfiladora aparece (dependiendo de la versión de Java que se está ejecutando y cómo muchos otros programas de Java se están ejecutando en ese momento), o presenta un recuadro de diálogo pidiendo una URL de un proceso para conectarse, o enumera una serie de diferentes procesos locales de Java para conectarse — algunas veces, incluyendo el propio proceso de JConsole.

Trabajando con JConsole

En Java 5, Los procesos Java no se instalan de manera predeterminada para que sean perfilados. Transferir un argumento de línea de comandos—-Dcom.sun.management.jmxremote— en el inicio, le dice a la VM de Java 5 que abra las conexiones, para que el perfilador pueda encontrarlos. Una vez que JConsole recoge el proceso, usted sólo tiene que hacer doble clic en él para comenzar la creación de perfiles.

Los perfiladores tienen sus propias sobrecargas, por lo que es buena idea dedicar unos minutos a averiguar lo que la produce.La forma más fácil de descubrir sobrecargas de JConsole es que primero se ejecute una aplicación por sí misma, para después ejecutarla con el perfilador, y medir la diferencia. (La aplicación no debe ser demasiado grande ni demasiado pequeña, mi favorita es la aplicación de demostración SwingSet2 que viene con el JDK.) Así, por ejemplo, intenté ejecutar SwingSet2 con -verbose:gc para ver barridos de recogida de basura, y luego ejecuté la misma aplicación y le conecté el perfilador de JConsole. Cuando JConsole estaba conectada, se generó una secuencia constante de barridos GC que de lo contrario no habrían sucedido. Esa fue la sobrecarga de rendimiento del perfilador.

2. Conexión remota a los procesos

Debido a que los perfiladores de aplicaciones Web asumen la conectividad para la creación de perfiles a través de un socket , sólo se necesita un poco de configuración para instalar JConsole (o cualquier otro perfilador basado en JVMTI, para el caso) para supervisar/perfiles de aplicaciones que se estén ejecutando de forma remota.

Por ejemplo, si Tomcat se estuviera ejecutando en una maquina llamada "webserver" y esa JVM tuviese JMX activada y recibiendo en el puerto 9004, el conectarla desde JConsole (o cualquier otro cliente JMX) requeriría una JMX URL de "service:jmx:rmi:///jndi/rmi://webserver:9004/jmxrmi".

Básicamente, todo lo que necesita perfilar un servidor de aplicación que se ejecuta en un centro de datos remoto es la URL de JMX. (Vea Recursos para más información sobre la supervisión y gestión remota con JMX y JConsole.)

3. Estadísticas de pista

JConsole tiene un número de pestañas que son útiles para la recolección de estadísticas, incluyendo:

  • Memoria: Para realizar un seguimiento de la actividad contra los diversos almacenamientos dinámicos en la recogida de basura de la JVM.
  • Hebras: Para el examen de la actividad actual de la hebra en la JVM de destino.
  • Clases: Para ver el recuento total de carga de clase de una VM.

Estas pestañas (y los gráficos asociados) son todos cortesía de los objetos JMX que cada Java 5 y posteriores VM se registran con el servidor de JMX, que está integrado en la JVM. La lista completa de los beans disponibles dentro de una JVM determinada se enumeran en la pestaña MBeans, con algunos metadatos y una interfaz de usuario limitado para ver esos datos o ejecutar esas operaciones. (El registro de las notificaciones está más allá de la interfaz de usuario de JConsole, sin embargo.)

Estadísticas de uso

Diga que un proceso Tomcat continua muriendo de OutOfMemoryErrors. Si usted quiere descubrir lo que está pasando, abra JConsole, haga clic en la pestaña Clases, y eche un ojo vago al recuento de clases a medida que pasa el tiempo. Si el recuento sube constantemente, entonces se puede asumir que uno de los dos, el servidor de aplicaciones o el código tienen una fuga ClassLoader en algún sitio y se quedaran sin espacio PermGen dentro de poco. Compruebe la pestaña Memoria si necesita confirmar el problema.

4. Crear un vuelco de almacenamiento dinámico para análisis offline.

Las cosas se mueven a menudo rápidamente en un ambiente de producción, y puede que no tenga tiempo para perderlo con su perfilador de aplicaciones. En cambio, puede tomar una instantánea de todo en su entorno Java y guardarlo para mirarla más adelante. Esto se puede hacer en JConsole, e incluso mejor en VisualVM.

Empiece por navegar a la pestaña MBeans, donde usted abrirá el nodo com.sun.management , seguido por el nodo HotSpotDiagnostic . Ahora seleccione Operations, y observe el botón "dumpHeap" que aparece en el panel de la derecha. Si se transfiere un nombre de archivo dumpheap para volcar en el primer recuadro de entrada ("Cadena de caracteres"), se tomará una instantánea de todo el almacenamiento dinámico de JVM y se volcará a ese archivo.

Más tarde, puede utilizar una variedad de diferentes perfiladores comerciales para analizar el archivo, o utilizar VisualVM para analizar la instantánea. (Recuerde que VisualVM está disponible en Java 6 y también como una descarga autónoma.)

5. JConsole no es una ciencia exacta

Como utilidad perfiladora, JConsole está bien, pero otras herramientas están mejor. Algunos perfiladores vienen con accesorios de análisis o una interfaz de usuario mancha, y algunos realizan mas seguimiento de datos de manera predeterminada de lo que lo hace JConsole.

Lo que es realmente fascinante acerca de JConsole es que todo el programa está escrito en "plain Old Java ", lo que significa que cualquier desarrollador de Java podría escribir una utilidad como ella. De hecho, el JDK incluye incluso un ejemplo de cómo personalizar JConsole mediante la creación de un nuevo plug-in para ella (ver Recursos). VisualVM, siendo construido sobre NetBeans, lleva el concepto de plug-in mucho más lejos.

Si JConsole (o VisualVM, o cualquier otra herramienta) no acaba de hacer lo que usted quiere, o realiza un seguimiento de lo que está usted buscando para realizar un seguimiento, o realiza un seguimiento en más o menos la forma en que usted quiere realizar un seguimiento, puede escribir la suya propia. Y si el código de Java parece demasiado complicado, siempre quedan Groovy o JRuby o cualquiera de una docena de otros lenguajes JVM para ayudarle a hacerlo más rápido.

Todo lo que en realidad necesita es una rápida y sucia herramienta de línea de comandos conectados a través de JMX, y podrá realizar un seguimiento de los datos exactos en los que está interesado, de la manera exacta que usted desea.

En conclusión

La supervisión de rendimiento de Java no termina con JConsole o VisualVM — hay una serie completa de herramientas ocultas en el JDK que la mayoría de los desarrolladores no conocen. El siguiente artículo en la serie ahondará en algunas herramientas de línea de comandos experimentales que pueden ayudarle a profundizar más en los datos de rendimiento que usted necesita. Debido a que estas herramientas se centran generalmente en datos específicos, son más pequeñas y ligeras que un perfilador completo, por lo que no incurren en las mismas sobrecargas de rendimiento.


Recursos para Descargar


Temas relacionados

  • "5 cosas que no sabía sobre ... ": Averigüe todo lo que desconoce sobre la plataforma Java en esta serie dedicada a convertir las curiosidades de la tecnología Java en útiles consejos de programación.
  • "Supervisión y gestión mediante JMX" (Sun Microsystems): Más información sobre el uso las herramientas de instrumentación integradas de JVM y JMX para supervisar y gestionar el rendimiento de las aplicaciones Java.
  • "Mustang JConsole" (Mandy Chung, Java.net, mayo de 2008): Una rápida introducción a JConsole Plugin API para compilar plug-ins personalizadas.
  • "Adquiriendo Información del Tiempo de Ejecución de la JVM " (Dustin Marx, Especulaciones y Cavilaciones de Desarrollo de Software de Dustin, junio de 2009): Demuestra las herramientas de supervisión y gestión integradas de JDK, incluyendo JConsole y VisualVM.
  • "Compile su Propio Perfilador" (Andrew Wilcox, developerWorks, marzo de 2006): El autor muestra cómo el utiliza la interfaz de agente de Java 5 y la AOP para compilar un perfilador personalizado, el Java Interactive Profiler.
  • Herramientas de Supervisión y Diagnostico de IBM para Java: Health Center es una herramienta de diagnóstico de baja sobrecarga para el control de ejecución de IBM Java Virtual Machine.
  • VisualVM es una herramienta visual que integra varias herramientas JDK de línea de comandos y posibilidades de creación de perfiles ligeros.

Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=tecnologia Java
ArticleID=811071
ArticleTitle=5 cosas que no sabía sobre la ... supervisión del rendimiento de Java, Parte 1
publish-date=04232012