Saltar al contenido
Portada » Tutorial JConsole

Tutorial JConsole

JConsole es una herramienta JMX – Java Management Extension para monitorización y gestión. Usando esta herramienta un usuario puede monitorizar un proceso Java local o remoto. La herramienta permite al usuario establecer unas operaciones predefinidas a monitorizar. Además, en tiempo de ejecución si el usuario necesita recuperar el valor de una variable puede hacerse mediante MBeans.

Algunos parámetros típicos a monitorizar son la memoria, hilos, uso de CPU, etc.

1.- Análisis de Memoria

1.1.- Fugas de memoria (memory leaks)

En este escenario JConsole nos permitirá ver como la pila de memoria se divide en diferentes espacios y como el Recolector de Basura (Garbage Collector) lo maneja de manera eficiente.

Recolección de basura (Garbage Collection)

En Java, el recolector de basura (GC) es el responsable de liberar memoria que ya no está siendo utilizada por ningún objeto. Cualquier objeto que quede sin referencia (sin un puntero que lo direccione) es susceptible de ser liberado.

¿Qué es una fuga de memoria (Memory Leak)?

Las fugas de memoria se provocan cuando un programa falla al liberar memoria en desuso que puede desembocar en resultados inesperados o que la aplicación caiga. Podemos dividir las fugas en dos tipos:

  • Fugas causadas por objetos que no se pueden obtener desde el código en ejecución pero que el GC no puede liberar su espacio.
  • Fugas causadas por objetos que son alcanzables por el código en ejecución pero que no van a volver a ser usados y que por tanto el GC no puede liberar.

1.2.- Extraer un heap dump de memoria para su análisis

Un heap dump es una foto de todos los objetos Java que existen en el espacio de pila (heap). Normalmente un fichero de heap dump lleva la extensión .hprof.

Es útil extraer los heap dump cuando tu aplicación Java está requiriendo más memoria de lo esperado o cuando se ha detenido bruscamente con un OutOfMemory. El análisis del heap dump en estos casos nos llevará a la causa raíz.

Podemos usar VisualVM en JConsole para extraer los heap dump.

2.- Análisis de hilos (threads)

2.1.- Identificar situaciones de bloqueo

Las situaciones de bloqueo entre hilos pueden describirse de la siguiente forma:

  1. El hilo 1 hace el bloqueo del objeto 1.
  2. El hilo 2 hace el bloqueo del objeto 2.
  3. El hilo 1 intenta bloquear el objeto 2, sin embargo tiene que esperar a que el hilo 2 lo libere.
  4. El hilo 2 intenta bloquear el objeto 1, sin embargo debe esperar a que el hilo 1 lo libere.

Para detectar estas condiciones de bloqueo es importante saber leer la Stacktrace de los logs. Desde JConsole, en la pestaña Thread podemos hacer click directamente en el botón “Detect Deadlock”.

3.- Análisis de uso de CPU

Las operaciones de un programa pueden ser ejecutadas en el espacio del kernel o en el espacio del usuario. Las operaciones del kernel son privilegiadas como por ejemplo escribir en un fichero en disco. Un programa corriendo en el espacio de usuario puede ejecutar operaciones en el kernel haciendo llamadas del sistema. JConsole provee métricas separadas para el uso de CPU por parte del kernel y del espacio del usuario.

Utilizaremos la pestaña de MBeans pqara encontrar el uso de CPU por hilo en la JVM. Hay tres operaciones principales: dumpAllThreads, getThreadCPUTime, y getThreadUserTime

5.- Ventajas del uso de JConsole

  • Es gratuito, no necesitas licencia para uso comercial. Otras herramientas, como JProfiler si lo necesitan.
  • La mayor parte de las máquinas incluyen un JDK, por lo que no es necesario descargar JConsole.
  • Es válido tanto para aplicaciones pequeñas y más grandes.

Recursos Java gratuitos

AsuntoDescripción
Tutorial básico y sintaxisTutorial básico Java y sintaxis. Aprende los fundamentos del lenguaje.
Hilos (Threads)Aprende a manejar hilos y las cuestiones básicas de la concurrencia
Funciones LambdaAquí te enseñamos las nociones más importantes para arrancas con funciones lambda
PalíndromosPrograma de ejemplo para el uso de palíndromos en Java.
Máquina Virtual de JavaTe explicamos el funcionamiento de la máquina virtual de java (Java Virtual Machine – JVM)
JDK, JRE y JVMDiferencias entre el JDK, JRE y JVM.
Mejores libros Java en EspañolHazte con los mejores libros Java para aprender paso a paso y profundizar en las mejores prácticas
TensorFlowManejo del API de TensorFlow para la construcción de grafos de operaciones y su ejecución
Tutorial Log4jTutorial para el manejo de Log4j, herramienta ágil y flexible para la gestión de Logs en Java
Java SecurityEntiende y aplica las posibilidades que da Java para mantener la seguridad
Tutorial JConsoleAprende los conceptos básicos de monitorización de procesos Java con JConsole
JavaFXTutorial de JavaFX, librería gráfica moderna para construcción de GUIs en móvil, escritorio y web.
Estructuras de datos en JavaExplicación y ejemplos de las estructuras de datos más importantes: listas, pila, cola, arbol.
JavaapiConjunto de clases, interfaces, métodos y paquetes que forman parte de la plataforma Java estándar
Algoritmo HuffmanMétodo eficiente para codificar datos, asignando códigos más cortos a los caracteres más frecuentes