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

Culpar a un mal código (o monos de mal código) no le ayudará a encontrar cuellos de botella de rendimiento y mejorar la velocidad de las aplicaciones™ Java, ni tampoco adivinarla. Ted Neward dirige su atención a las herramientas para supervisar el rendimiento de Java, comenzando con cinco consejos para el uso del perfilador integrado de Java 5, JConsole, para recopilar y analizar datos de rendimiento.

Ted Neward, VP of Analytics, Neward & Associates

Ted Neward photoTed Neward es el director ejecutivo de Neward & Associates, donde el consulta, asesora, enseña, y presenta en Java, .NET, XML Services, y otras plataformas. Reside en los alrededores de Seattle, Washington.



23-04-2012

Sobre esta serie

¿Así que usted cree que sabe acerca de la programación Java? La realidad es que la mayoría de los desarrolladores arañan la superficie de la plataforma Java, aprendiendo sólo lo justo para hacer su trabajo. En esta serie, Ted Neward ahonda debajo de la funcionalidad de la clase Core de la plataforma Java para descubrir hechos poco conocidos que podrían ayudarle a resolver incluso los retos de programación más pegajosos.

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.

¿JConsole o VisualVM?

JConsole viene con cada nuevo release de la plataforma Java desde Java 5. VisualVM es un perfilador actualizado basado en la plataforma NetBeans, que fue incluido por primera vez en algún sitio alrededor de Java 6 Update 12. La mayoría de las tiendas no se han actualizado a Java 6 todavía, por lo que este artículo se centra en JConsole. La mayoría de los consejos deben ser relevantes para los dos perfiles, sin embargo. (Nota: Además de incluirse en Java 6, VisualVM es una descarga autónoma. Consulte Recursos para descargar VisualVM.)

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

No sea típico

Las respuestas comunes para descubrir un problema de rendimiento en el código de aplicación varían, pero también son predecibles. Los desarrolladores que han estado programando desde los primeros días de Java están más por la labor de poner en marcha el antiguo IDE y empezar a hacer revisiones de código de los componentes principales de la base de código, buscando "distintivos rojos" conocidos en la fuente como bloques sincronizados, asignaciones de objetos, y así. Con menos años de programación, un programador probablemente lea atentamente acerca de los distintivos -X que soporta la JVM, buscando la manera de optimizar la recogida de basura. Y los novatos, por supuesto, ir directamente a Google, con la esperanza de que alguien más ahí fuera ha encontrado el interruptor "hacer que vaya rápido" mágico de la JVM, de manera que puedan evitar tener que escribir de nuevo algún código.

No hay nada intrínsecamente malo con ninguno de estos enfoques, pero son todos asuntos arriesgados.La respuesta más efectiva a un problema de rendimiento es utilizar un perfilador — ¡ y ahora que están integrados en la plataforma Java, realmente no tenemos excusa para no hacerlo!

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

Aprender

Obtener los productos y tecnologías

  • VisualVM es una herramienta visual que integra varias herramientas JDK de línea de comandos y posibilidades de creación de perfiles ligeros.

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


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