Está en la página 1de 18

Traduccin del artculo: Chuk-Munn Lee of Sun Microsystems Troubleshoots Java SE 6 Deployment publicado en http://java.sun.

com/developer/technicalArticles/javase/troubleshoot/

ndice de contenido
Solucin de problemas y la Plataforma Java SE 6...............................................................................1 Un resumen de la administracin de memoria.....................................................................................2 Herramientas: jps, jinfo y jstat..............................................................................................................4 HPROF.................................................................................................................................................8 El lenguaje de consulta de objetos jhat.................................................................................................9 Herramientas Visuales: Jconsole y Java VisualVM..............................................................................9 Problemas Comunes...........................................................................................................................11 Causas de los problemas de memoria.................................................................................................11 Detectando problemas de retencin de memoria................................................................................12 Obtener una copia del Heap a examinar.............................................................................................14 Encontrando retencin de objetos......................................................................................................15 Finalizadores.......................................................................................................................................16 Resumen.............................................................................................................................................18 Para ms informacin.........................................................................................................................18

Solucin de problemas y la Plataforma Java SE 6


Lee define primero la solucin de problemas como localizar la fuente del problema y participar en un anlisis post-mortem de lo que lo caus. Seal que muchas mejoras para solucionar problemas en Java SE 6 las describi el desarrollador Mandy Chung (de Sun) en su blog. Con JDK 6, Lee dijo: Los desarrolladores ya no requieren iniciar sus aplicaciones con opciones especiales aadidas por las herramientas de JDK 6. La API permite a los usuarios enganchar sus propias herramientas para unirse al funcionamiento de la JVM y cargar un agente Java o un agente nativo. Los problemas de memoria son fciles de diagnosticar. El Java HotSpot VM permite a los desarrolladores hacer peticiones a un heap dump a demanda desde la herramienta jmap. Una herramienta de anlisis del heap, jhat, fue aadida en el JDK 6 para navegar en el heap dump snapshot. Es muy fcil diagnosticar un OutOfMemoryError gracias a un stack trace de donde la aplicacin fall. La nueva opcin -XX:+HeapDumpOnOutOfMemoryError llama al HotSpot VM para generar un heap dump cuando una localizacin del Java Heap o de la permanent generation no pudo ser satisfecha. Adicionalmente, una nueva opcin ha sido aadida -XX:-OnOutOfMemoryErro=<command>, permitiendo a los desarrolladores especificar un comando que el HotSpot VM invocaa cuando el OutOfMemoryError es

lanzado. El JDK 6 HotSpot VM proporciona un sistema integrado de sondeos DTrace, permitiendo a los desarrolladores trazar la pila completa de cualquier aplicacin Java que se ejecute en el SO Solaris 10. Adicionalmente, la Java SE Troubleshooting Guide ha sido actualizada para incluir la informacin de solucin de problemas para JDK 6.

Un resumen de la administracin de memoria


Lee resume primero la recoleccin de basura (garbage collection). El recolector de basura (GC) detecta la basura, definida como objetos que ya no son alcanzables, luego se recupera y hace que el espacio est disponible para el programa en ejecucin. El GC funciona normalmente en modo stopthe-world, esto es que congela el heap cuando trabaja. Tiene varios algoritmos, como el de copiado, marca de barrido, marca-compacto y otros. Lee puntualiza como un error comn: el GC no siempre es la causa de la lentitud de una aplicacin, y el aadir ms memoria no siempre har que mejore su funcionamiento. Dar ms memoria podra ralentizar el sistema si la memoria no es el problema observa Lee. El GC en la mquina virtual Java HotSpot se basa en la idea de que los objetos mueren jvenes. Este es un dato emprico, y algunas aplicaciones podran no ajustarse a esto. Pero por lo general, la mayora de la aplicaciones java lo hacen. As que el HotSpot VM est optimizado para este escenario. Lee aconseja a los desarrolladores a utilizar objetos de corta duracin que se utilizan brevemente y luego se descartan, en lugar de objetos de larga duracin que se estn continuamente actualizando. Los objetos viejos de larga duracin deben ser manejados lo menos posible y se movern a la old generation por el GC. El HotSpot VM de Java mantiene los objetos viejos y jvenes en espacios separados, con el objeto de hacer el ciclo de asignacin, administracin y cancelacin lo ms rpido y eficiente que sea posible. Los desarrolladores pueden explotar diferentes algoritmos del GC, basados en sus propio hardware, para mejorar la administracin de objetos en estos espacios. Con el J2SE 5.0, Sun introdujo ergonomics dentro del HotSpot VM. JVM ergonomics permite a los desarrolladores especificar las conductas deseadas, por ejemplo, que el GC de la VM pause no ms de 750 milisegundos. El GC tratar de ajustar dinmicamente su comportamiento para cumplir con las especificaciones establecidas.

Figura 1 Muestra como la ltima versin de JDK permite a los desarrolladores especificar diferentes algoritmos en diferentes espacios con el diseo del HotSpot VM, el cual se divide en tres reas.

El perm generation es basicamente para el cargador de clases, explica Lee. Luego est la old y young generation. La young generation se divide en tres espacios: Eden, Survivor Space 1 (SS#1) y Survivor Space 2 (SS#2). Cmo son usadas? Dar una simple explicacin. Cuando haya un nuevo objeto, el objeto es creado en el espacio Eden. As que despus de estar corriendo un tiempo, el espacio Eden se llenar" Lee puntualiza que se producen recolecciones de basura menores, en la cual todos los objetos que habitan en Eden son copiados al SS#1. Eden es luego vaciado y preparado para recibir nuevos objetos. Despus de la GC menor, los objetos son alojados en el Eden nuevamente. Despus de un tiempo, el espacio del Eden se llena otra vez, y se producen nuevas GC menores. Los objetos supervivientes en SS#1 y Eden son copiados a SS#2, y ambos SS#1 y Eden son reseteados. Aunque los objetos son frecuentemente copiados, ya sea desde el Eden o desde un SS al otro, en un momento dado, slo el Eden y un SS estn en funcionamiento. Cada vez que un objeto es movido del Eden a un SS o de un SS a otro, un contador y su cabecera se incrementa. Por defecto, si el copiado ocurre 16 veces o ms, el HotSpot VM para de copiarlos y los mueve al old generation. Si un objeto no puede ser creado en el Eden, va directamente al old generation. Mover un objeto de SS al old generation, debido a su edad, se llama tenuring. Debido a tenuring, la vieja generacin se llena con el tiempo. Esto requiere la recoleccin de basura de la old generation, que se llama un full GC. Un full GC es un proceso de compactacin que es mas lento que un GC menor.

Tabla 1. Tools for Diagnosis of Common Problems Problem Symptom Diagnostic Tools Java Heap Analysis Tool (jhat)

OutOfMemoryError Insufficient memory Memory leaks Growing use of memory Frequent garbage collection

Finalizers Deadlocks Looping threads High lock contention

Java Monitoring and Management Console (JConsole) JVM Statistical Monitoring Tool (jstat) A class with a high growth rate Memory Map (jmap) A class with an unexpected number of instances See jmap -histo option An object is being referenced unintentionally JConsole or jmap with jhat See jmap -dump option JConsole Objects are pending for finalization jmap -dump with jhat JConsole Threads block on object monitor or java.util.concurrent locks Stack Trace (jstack) Thread CPU time is continuously increasing JConsole with JTop Thread with high contention statistics JConsole

Herramientas: jps, jinfo y jstat


Una variedad de herramientas permiten a los desarrolladores observar el funcionamiento de las aplicaciones Java. El Java Virtual Machine Process Status Tool (jps), el equivalente java al comando Unix ps, lista las mquinas virtuales en ejecucin, incluido los embebidos. Luego se le puede pasar un nmero de proceso, el cual es el nombre de la aplicacin o clase, y los diferente niveles de detalle con la lnea de comandos. jps es el tpico punto de entrada para la mayora de diagnsticos (necesitas encontrar el nmero de proceso primero), dice Lee. Jps -s da un poco ms de informacin. Jps -l da tanto el nombre de la clase como la lnea de comando con la que se lanz. Mirar Figura 2.

Figura 2

La herramienta jinfo extrae informacin de configuracin desde la VM o fichero core. Slo puede leer ficheros core recogidos por el jinfo que est corriendo en la misma instancia del sistema operativo. Otras opciones incluyen buscar en el separador de fichero u obtener informacin de las banderas del VM que son establecidas con el fichero core. Figura 3

El Java Virtual Machine Statistics Monitoring Tool (jstat) muestra las estadsticas de rendimiento potencialmente detalladas para la JVM con dos opciones bsicas. Con la opcin general, en lugar de un listado de nmero, jstat ofrece una lnea con la situacin actual. Las opciones de salida determinan el contenido y el formato de salida de jstat. La opcin de salid -gcutil, la cual da un resumen de las estadsticas del GC, es la opcin ms utilizada. En la Figura 4 muestra SS#0 y SS#1, Survivor Space 0 y Survivor Space 1, Eden y el

porcentaje de llenado. Proporciona los tiempos de young GC y young GCT y el full GC, enfocado a los perodos de tiempo de GCT, comenta Lee. Figura 4

La opcin de salida -gccause muestra el mismo resumen estadstico del recolector de basura que la opcin -gcutil, pero incluye la causa del ltimo evento del GC y, siempre que sea aplicable, el actual evento del GC. Aade una columna que identifica por qu el GC ha ocurrido. Cuando muestra allocation failed, el heap es demasiado pequeo. La herramienta jstack provee una traza de la pila de todos los hilos enlazado a la VM, como tambin los hilos de las aplicaciones y los hilos internos de la VM, como se muestra en el Figura 5. Tambin permite la deteccin de deadlock y realiza un seguimiento de la pila si la VM se cuelga. Realizar una deteccin de deadlock con -l, explica Lee, pero esto slo proporciona una pista para evaluar si los hilos estn en espera de un objeto. Si tu VM est colgada, puedes forzar una salida de la traza de pila pasndole un -F. Figura 5

Lee nos remite a la Figura 6, que es un ejemplo de un proceso Java en una mquina Linux. Puedes ver que est timed_waiting y locked. Qu significa?. Lock significa que est bloqueado en un proceso o recurso externo. Por ejemplo, podra estar a la espera de un puerto libre. Pero con la salida de jstack, no podemos conocer esto. Tendra que utilizar una herramienta externa como Dtrace en Solaris para verificar esto. Wait significa que est internamente en espera de un monitor. En este caso, est esperando algo del JDK 5 llamado ReentrantLock.

Figura 6

La herramienta jmap , como muestra la Figura 7, imprime los objetos compartidos del mapeo de memoria o los detalles del heap de memoria de un proceso dado, fichero core, o servidor remoto. Ofrece configuracin de memoria detallada e informacin del espacio libre. Figura 7

La Figura 7 nos dice que estamos utilizando el colector mark y sweep, cuanto espacio libre tenemos, y que cantidad del heap es utilizado, comenta Lee. Cuando tenemos una cierta cantidad en el heap, comienza solicitando la memoria del sistema operativo. Por lo general, para aplicaciones de gran tamao, establecemos la VM de modo que no tenga que hacer trabajo extra. Luego tenemos el espacio Eden, la capacidad actual, el espacio de datos usado y libre, y as sucesivamente.

HPROF
El agente de profiling (anlisis) de heap y CPU (HPROF), una herramienta de anlisis del heap y cpu que recoge informacin del uso de cpu, bolcados del heap, estados de los hilos, utiliza la herramienta intefaz de la JVM (JVMTI), as que cada JVM tiene una interfaz de diagnstico. Para iniciar HPROF, aadir -Xrunhprof a Java, darle opciones, y arrancar Java, explica Lee. Por defecto, HPROF slo volcar informacin tras salir de la aplicacin. La informacin puede estar en texto o en binario. Para binario, usar -Xrunhprof:format_b, y luego especificar el nombre del fichero con file=<filename>. Por defecto el nombre del fichero es java.hprof. Hay dos formas de recoger un volcado de HPROF: puedes forzarlos pulsando Ctrl-\ en windows o enviando un SIGHUP en Solaris y Unix. El otro mtodo es esperar que la aplicacin java finalice y HPROF escribir su salida en el dump. Este ltimo es el comportamiento predeterminado. Mientras que jmap y HPROF recogen la misma informacin que los anlisis de jhat, jmap es mucho ms rpido que HPROF porque jmap est embebido dentro del HotSpot VM. Lee advierte que si los desarrolladores trabajan con un heap demasiado grande, HPROF puede tardar mucho tiempo en dar la salida del dump. Una vez que los desarrolladores han recogido la informacin usando jhat o HPROF, la informacin es montada como sigue:
jhat dump:format=b,file=heap_dump_file

Una vez que jhat arranca, inicia un servidor web interno y parsea la informacin, se puede navegar a travs de un navegador estndar (suele levantarlo por el puerto 7000). Ver la Figura 8. Un conjunto de consultas predefinidas muestran todas las clases, objetos, e instancias todos los objetos alcanzables desde una raz. Recuerda, avisa Lee, cuando ests rastreando la memoria, observa las instancias. No busques todas la clases. Lee explic que la primera vez que utiliz la herramienta, observ las clases y no pudo localizar el origen de su problema. Figura 8

La herramienta jhat inicialmente ofrece un conjunto de consultas estndar. Para ejecutar una consulta no estndar por ejemplo, buscar los objetos A, B, C, y obtener todas las referencias actuales desde otros objetos los desarrolladores pueden crear sus propias consultas a travs de la pgina html.

El lenguaje de consulta de objetos jhat


El lenguaje de consulta de objetos jhat (OQL) es un SQL similar al JDBC orientado a objetos OQL, con funciones incorporadas como el heap, referencias, alcanzables, tamao, y otros. Se pueden crear consultas como estas: encontrar todas la instancias String mayores que 1K, o encontrar todas las instancias URL que son referenciadas por dos o ms objetos. Figura 9

Tened cuidado, avisa Lee, porque si tienes un gran heap, debes ejecutarlo en una mquina rpida. Si tienes una consulta realmente compleja en un heap muy grande, podra llevarse muchsimo tiempo.

Herramientas Visuales: Jconsole y Java VisualVM


La consola de monitorizacin y administracin de Java (Jconsole), una herramienta visual que se incluye con el JDK, ofrece una consola grfica que permite a los desarrolladores monitorizar y administrar las aplicaciones Java. JConsolePlugin API permite a los desarrolladores crear sus propios plug-ins. Jconsole provee informacin de memoria usada y actividad del GC, hilos, traza de la pila de hilos, bloqueos, y objetos pendientes de finalizar. Tambin ofrece informacin en tiempo de ejecucin como el tiempo desde el arranque y tiempo de cpu, as como informacin de JVM como classpath, propiedades, argumentos de lnea de comandos y ms.

Figura 10

Java VisualVM se basa en herramientas como jstat, jinfo, jstack y jmap para obtener informacin detallada acerca de la aplicaciones que corren en una JVM. A continuacin se presentan los datos de una manera unificada, de gran riqueza grfica. Java VisualVM ayuda a los desarrolladores de aplicaciones Java a resolver problemas de aplicaciones y a controlar y mejorar el rendimiento de estas. Java VisualVM puede permitir a los desarrolladores generar y analizar heap dumps, seguir fugas de memoria, realizar y supervisar la recoleccin de basura, y realizar profiling de cpu y memoria. Existen plug-ins para aadir funcionalidades a Java VisualVM. Por ejemplo, la mayora de las funcionalidades de Jconsole estn disponibles a travs de la pestaa Mbeans y Jconsole Plugin envuelto en plug-ins. En Julio de 2008, Sun anunciaba que incluan Java VisualVM con el JDK 6 update 7 de modo que Java VisualVM puede ser ejecutado invocando el comando jvisualvm bajo el directorio de ejecutables del JDK. Java VisualVM se incluye junto con la ltima versin FCS de JDK 6 Update 7 como jvisualvm. Ver Figura 11. Figura 11

Sabemos que durante mucho tiempo la gente ha usado NetBeans Profiler para identificar problemas de memoria, observa Lee. As que en esencia, ahora es un profiler independiente. Java VisualVM, de acuerdo con Lee, parece mejor que Jconsole y va bien con una arquitectura de plug-in, como NetBeans IDE, permitiendo a los desarrolladores crear y descargar plug-in y maniobrar alrededor de la ventana de NetBeans. Lee destac el punto de que a medida que las aplicaciones crecen en sofisticacin, es importante para los desarrolladores tener sus propias herramientas, ya que las herramientas estndar slo les servirn un poco ms.

Problemas Comunes
La falta de suficiente espacio en el heap para alojar nuevos objetos da como resultado el error java heap space. Esto puede ocurrir cuando hay insuficiente memoria para arrancar una aplicacin. La causa ms comn podra ser la retencin de memoria por la aplicacin de objetos que han sobrevivido a su utilidad pero por alguna razn no pudieron se liberados por el GC. Ver figura 12. Figura 12

Un error comn de la zona no heap, el error PermGen space, ocurre cuando la JVM se queda sin espacio en el permanent generation heap. Debido a que la permanent generation y las cadenas internas son almacenadas en la permanent generation heap, cuando se llena, le es imposible cargar clases. Las grandes aplicaciones JSP pueden causar este problema porque JSP es compilado dentro de las clases, y t ests utilizando muchas clases desde muchas libreras, dice Lee. Pero generalmente, esto no es un problema. Los desarrolladores que escriben cdigo Java Native Interface (JNI) son propensos a ver los errores nativos de memoria, lo cual no significa necesariamente que haya ocurrido un leak de memoria. Pero s significa que el sistema no tiene suficiente memoria. Podra ser simplemente que tienes un tamao incorrecto del heap. As que no nos adelantemos pensando que tenemos un leak de memoria. Prueba a aumentar el tamao del heap, o ver el consumo en un grfico. Los mensajes de error de memoria son simplemente indicadores que de algo podra estar mal.

Causas de los problemas de memoria


Los detectores de eventos pueden causar leaks de memoria, especialmente cuando los desarrolladores los aaden a los patrones y se olvidan de ellos hasta que causan el leak. Ver la Figura 13. Valores en mapas significa que tenemos una clave y un valor y se pierde la clave, dice Lee. De modo que el valor al que apuntaba queda retenido en un mapa. Usad rich hash map, los cuales avisan cuando la clave ya no es referenciable de modo que el valor y la funcin sern eliminados.

Figura 13

A veces, varios recursos, como los grficos, Jframe, socket y conjuntos de resultados (result set) no son liberados. Debido a que los finalizadores de cdigo heredados pueden causar que el GC se ejecute mas lento, los finalizadores se deben colocar en algn otro lugar. La presin de memoria hace que el GC ejecute los finalizadores se necesitan al menos dos ciclos del GC para borrar objetos con finalizadores los cuales no se garantiza que funcionen en un orden particular, dice Lee. Seal que de hecho no existe ninguna garanta de que funcione absolutamente, y desaconseja el uso de finalizadores. Insiste en que si hay recursos para ser eliminados, los desarrolladores deben utilizar mtodos explcitos para eliminar los recursos antes que la anulacin de objetos. Los deadlocks comunes incluyen hilos en espera de recursos an no liberados y la alta contencin de bloqueos, lo cual significa que muchos hilos estn aceptando un objeto particular bloqueado. El cdigo sincronizado es ms lento, as que cambiadlo por ReentrantLock, y ser ms rpido que el cdigo sincronizado, explica Lee. La alta contencin de bloqueos causa numerosos bloqueos e hilos en espera, lo cual no debe significar que la aplicacin est congelada. El punto clave es que los recursos excesivamente sincronizados en un ambiente con muchos hilos puede conducir a la falta de respuesta.

Detectando problemas de retencin de memoria


Cual es la mejor manera de recopilar informacin y analizar la situacin?. Una aplicacin que est quedando sin memoria, podra no tener un problema de retencin de memoria. Podra significar que no tiene suficiente memoria. Lee aconseja a los desarrolladores ejecutar Jconsole y visualizar si el heap est creciendo. Ver la Figura 14.

Figura 14

Para ejecutar herramientas de resolucin de problemas remotamente, necesitars configurar tu servidor remoto para que acepte conexiones JMX, seala Lee. Generalmente querrs iniciar herramientas accediendo al sistema local. La herramienta produce grficos interesantes pero sin datos que puedan ser usados para calibrar la memoria. Calibra la memoria con los detalles de printGC, captralo en un archivo local y ejecuta la aplicacin. Por lo general es mejor escribir un script y filtrar los GC menores y el full GC. Extraemos la informacin de la columna anterior y posterior de GC y se hacemos un promedio de ellos, aadiendo quizs un 20 o 30 % a la memoria. Lee aconseja a los desarrolladores a usar jmap -histo para obtener un histograma de todos los objetos en uso y luego buscar sospechosos en grandes asignaciones de objetos. Ver la figura 15. Figura 15

Obtener una copia del Heap a examinar


Una vez que los desarrolladores determinan que tienen un problema, Lee recomienda que obtengan una copia del heap y lo analicen, o bien cuando la aplicacin est corriendo o cuando esta muera, siempre y cuando la aplicacin est en un estado estable y no est cargando o inicializando. Si ests usando Jconsole, dice Lee, ve a la pestaa Mbeans. Dentro de com.sun.management HotSpotDiangostic Operations dumpHeap. Con esto obtendr el heap en el directorio donde est corriendo la aplicacin o donde se inici Jconsole. Alternativamente, si jps est en la lnea de comandos, lanza jmap -dump:forma=b y a continuacin el ID del proceso (optenido con jps) y el nombre del fichero donde volcar el dump: jmap -dump:format=b,file=fichero pid Figura 16

Si una aplicacin muere en un OutOfMemoryException, puedes localizar cmo es asignada la memoria reiniciando tu JVM con la opcin -XX:+HeapDumpOnOutOfMemoryError. Esto har que cuando la JVM se quede sin memoria otra vez, generar un heap dump antes de salir. Si los desarrolladores se han olvidado de establecerlo, usa jinfo para activarlo: jinfo -flag +HeapDumpOnOutOfMemoryError PID. En el histograma de jmap se ver algo como lo que se muestra en la Figura 16. Hay varias formas de recoger informacin del heap, pero lo ms tpico es que usemos jmap y HPROF, concluye Lee. Lee ofrece una tercera opcin (Figura 17): Usar la aplicacin demo JVMTI heap-walker en el directorio demo de JVM. Inicia la aplicacin, y envia una seal SIGQUIT para volcar la informacin, aunque seal que esta es una herramienta ms de aprendizaje.

Figura 17

Encontrando retencin de objetos


A continuacin, usaremos jhat con el fichero heap. Analizaremos la informacin viendo el heap. Qu objetos estn vivos? Qu lo estn manteniendo?Dnde se asignan? Si estn vivos, dnde fueron creados?. Consulte la Figura 18. Figura 18

Tpicamente, dice Lee, analizaremos el fichero de volcado binario en jhat, abriremos un navegador y buscaremos una lnea llamada 'show instance count of all classes excluding plataform'. Muestra todas las instancias de mi aplicacin. No muestra las clases de la plataforma. Obtendremos un listado y miraremos aquellos objetos que son bastante grandes, y cliquearemos en alguna de sus instancias. Vers ms informacin de esa instancia en particular. Observa el 'object allocated from', el cual es una traza del objeto y una pista de su creacin, adems de otros objetos que hacen referencia a este objeto. En HPROF, cuando no se haya optimizado durante su compilacin (-O), tambin podrs conocer en qu lnea y en que fichero fue creado el objeto.

Observ que jvisualvm tambin ofrece funciones similares para analizar el heap dump. Los desarrolladores que no quieran usar HPROF o jmap pueden usar toda la informacin creada por jmap y Java, y lanzarla en el NetBeans IDE 6 Profiler. Cuando creamos un jmap con NetBeans IDE, se usa la extensin .nps en el fichero. Cuando se utiliza HPROF, el fichero debe terminar en .HPROF. Por defecto es java.hprof.

Finalizadores
Lee puntualiz que la forma de ver los finalizadores es usando jmap -finalizerinfo <pid> y se obtendr el conteo de objetos pendientes de su finalizacin. Ver Figuras 19 y 20. Para obtener esta informacin desde Jconsole, los desarrolladores debern ir al campo Pending finalization en la pestaa VM Sumary. Figura 19

Los desarrolladores pueden obtener la misma informacin desde la lnea de comandos arrancando la VM con esta opcin, como se muestra en la Figura 21:
XX:+ PrintConcurrentLocks

Figura 20

Y luego ingresar:
jstack -l <pid>

La contencin de bloqueos, por defecto, no viene activada en la VM. Para activarla desde Jconsole y aadirla a la VM, utiliza Mbean, ve al hilo, y cambialo a on para obtener informacin de la contencin de hilos. Lee concluy haciendo referencia a la Figura 21, la cual muestra un ejemplo de HPROF en formato texto que nos da los mtodos e hilos en funcionamiento. Esto nos dice que ha tomado muestras de hilos 2484 veces y encontr que estaba muy activo, dice. En el resto de la informacin de HPROF, busque el nmero de traza y obtenga ms informacin. Figura 21

Para finalizar, mencion la herramienta JTop , la cual est incluida en JDK 6 y ofrece el uso de CPU de todos los hilos en ejecucin de la aplicacin. Jtop muestra el uso de la aplicacin del

tiempo de CPU por hilo y permite a los desarrolladores fcilmente detectar que hilos estn usando enormes cantidades de tiempo de CPU. Si el alto consumo de CPU por hilo no es el comportamiento esperado, el hilo podra estar dentro de un bucle.

Resumen
Lee concluy con tres puntos. Primero, hay muchas opciones para recoger datos a analizar. El paquete JDK 6 incluye muchas herramientas para este fin. Segundo, recientes desarrollos muestran que Sun se ha comprometido no slo a hacer ms fcil la recoleccin de datos, sino tambin facilitar a los desarrolladores analizar la informacin recogida. Jconsole y ms recientemente jvisualvm en el JDK 6 update 7 es prueba de ello. Tercero, Sun ofrece muchos recursos para los desarrolladores.

Para ms informacin
Monitoring and Managing Java SE 6 Platform Applications Sun Tech Days DTrace Mandy Chung on Changes in Java SE 6 Java SE Troubleshooting Guide Java HotSpot VM Interview With Chuk-Munn Lee