Una guía para los perfiladores de Java

1. Información general

A veces, escribir código que simplemente se ejecuta no es suficiente. Es posible que deseemos saber qué sucede internamente, como cómo se asigna la memoria, las consecuencias de usar un enfoque de codificación sobre otro, las implicaciones de las ejecuciones concurrentes, las áreas para mejorar el rendimiento, etc.

Un Java Profiler es una herramienta que supervisa las construcciones y operaciones de código de bytes de Java a nivel de JVM . Estas operaciones y construcciones de código incluyen la creación de objetos, ejecuciones iterativas (incluidas las llamadas recursivas), ejecuciones de métodos, ejecuciones de subprocesos y recolecciones de basura.

En este artículo, discutiremos los principales Java Profilers: JProfiler, YourKit, Java VisualVM y Netbeans Profiler.

2. JProfiler

JProfiler es la mejor opción para muchos desarrolladores. Con una interfaz de usuario intuitiva, JProfiler proporciona interfaces para ver el rendimiento del sistema, el uso de la memoria, las posibles pérdidas de memoria y la creación de perfiles de subprocesos.

Con esta información, podemos saber fácilmente qué necesitamos optimizar, eliminar o cambiar en el sistema subyacente.

Así es como se ve la interfaz de JProfiler:

Interfaz de descripción general de JProfiler con características

Como la mayoría de los perfiladores, podemos utilizar esta herramienta tanto para aplicaciones locales como remotas. Esto significa que es posible crear perfiles de aplicaciones Java que se ejecutan en máquinas remotas sin tener que instalar nada en ellas .

JProfiler también proporciona perfiles avanzados para bases de datos SQL y NoSQL . Proporciona soporte específico para la creación de perfiles de bases de datos JDBC, JPA / Hibernate, MongoDB, Casandra y HBase.

La siguiente captura de pantalla muestra la interfaz de sondeo JDBC con una lista de conexiones actuales:

Vista de prueba de la base de datos de JProfiler

Si estamos interesados ​​en aprender sobre el árbol de llamadas de interacciones con nuestra base de datos y vemos conexiones que pueden filtrarse , JProfiler lo maneja muy bien.

Live Memory es una característica de JProfiler que nos permite ver el uso de memoria actual de nuestra aplicación . Podemos ver el uso de memoria para declaraciones de objetos e instancias o para el árbol de llamadas completo.

En el caso del árbol de llamadas de asignación, podemos elegir ver el árbol de llamadas de los objetos en vivo, los objetos recolectados de basura o ambos. También podemos decidir si este árbol de asignación debe ser para una clase o paquete en particular o para todas las clases.

La siguiente pantalla muestra el uso de memoria en vivo de todos los objetos con recuentos de instancias:

Vista de memoria en vivo de JProfiler

JProfiler admite la integración con IDE populares como Eclipse, NetBeans e IntelliJ. ¡Incluso es posible navegar de la instantánea al código fuente !

3. YourKit

YourKit Java Profiler se ejecuta en muchas plataformas diferentes y proporciona instalaciones separadas para cada sistema operativo compatible (Windows, MacOS, Linux, Solaris, FreeBSD, etc.).

Al igual que JProfiler, YourKit tiene características centrales para visualizar subprocesos, recolecciones de basura, uso de memoria y fugas de memoria, con soporte para perfiles locales y remotos a través de tunelización ssh .

Aquí hay un vistazo rápido a los resultados del perfil de memoria de una aplicación de servidor Tomcat:

Perfil de memoria YourKit Java Profiler de la aplicación del servidor Tomcat

YourKit también es útil en aquellos momentos en los que queremos perfilar las excepciones lanzadas . Podemos averiguar fácilmente qué tipos de excepciones se lanzaron y la cantidad de veces que ocurrió cada excepción.

YourKit tiene una característica interesante de creación de perfiles de CPU que permite la creación de perfiles enfocados en ciertas áreas de nuestro código , como métodos o subárboles en subprocesos. Esto es muy poderoso ya que permite la creación de perfiles condicionales a través de su función de hipótesis.

La Figura 5 muestra un ejemplo de la interfaz de creación de perfiles de subprocesos:

Figura 5. Interfaz de creación de perfiles de subprocesos de YourKit Java Profiler

También podemos perfilar llamadas a bases de datos SQL y NoSQL con YourKit. Incluso proporciona una vista de las consultas reales que se ejecutaron.

Aunque esto no es una consideración técnica, el modelo de licencia permisiva de YourKit lo convierte en una buena opción para equipos distribuidos o multiusuario, así como para compras de licencias únicas.

4. Java VisualVM

Java VisualVM es una herramienta de creación de perfiles robusta pero simplificada para aplicaciones Java. De forma predeterminada, esta herramienta se incluye con Java Development Kit (JDK). Su funcionamiento se basa en otras herramientas independientes proporcionadas en el JDK, como JConsole , jstat , jstack , jinfo y jmap .

A continuación, podemos ver una interfaz de descripción general simple de una sesión de creación de perfiles en curso utilizando Java VisualVM:

Creación de perfiles de aplicaciones de servidor tomcat local Java VisualVM

Una ventaja interesante de Java VisualVM es que podemos ampliarlo para desarrollar nuevas funcionalidades como plugins . Luego, podemos agregar estos complementos al centro de actualización integrado de Java VisualVM.

Java VisualVM admite la creación de perfiles locales y remotos , así como la creación de perfiles de memoria y CPU. La conexión a aplicaciones remotas requiere proporcionar credenciales (nombre de host / IP y contraseña según sea necesario), pero no brinda soporte para tunelización ssh . También podemos optar por habilitar la creación de perfiles en tiempo real con actualizaciones instantáneas (normalmente cada 2 segundos).

A continuación, podemos ver la perspectiva de la memoria de una aplicación Java perfilada con Java VisualVM:

Histograma de montón de memoria Java VisualVM

Con la función de instantáneas de Java VisualVM, podemos tomar instantáneas de las sesiones de creación de perfiles para su posterior análisis .

5. NetBeans Profiler

NetBeans Profiler se incluye con el IDE NetBeans de código abierto de Oracle .

Si bien este generador de perfiles comparte muchas similitudes con Java VisualVM , es una buena opción cuando queremos que todo esté envuelto en un programa (IDE + Profiler).

Todos los demás perfiladores mencionados anteriormente proporcionan complementos para mejorar la integración de IDE.

La siguiente captura de pantalla muestra un ejemplo de la interfaz NetBeans Profiler:

Interfaz de telemetría Netbeans Profiler

Netbeans Profiler también es una buena opción para el desarrollo ligero y la creación de perfiles . NetBeans Profiler proporciona una ventana única para configurar y controlar la sesión de creación de perfiles y mostrar los resultados. Ofrece una característica única de saber con qué frecuencia se realiza la recolección de basura .

6. Otros perfiladores de sólidos

Algunas menciones de honor aquí son Java Mission Control, New Relic y Prefix (de Stackify); estos tienen menos participación de mercado en general, pero definitivamente merecen una mención. Por ejemplo, Stackify's Prefix es una excelente herramienta de generación de perfiles liviana, muy adecuada para generar perfiles no solo de aplicaciones Java sino también de otras aplicaciones web.

7. Conclusión

En este artículo, analizamos la creación de perfiles y los Java Profilers. Analizamos las características de cada Profiler y qué informa la posible elección de uno sobre otro.

Hay muchos perfiladores de Java disponibles y algunos tienen características únicas. La elección de qué generador de perfiles de Java usar, como hemos visto en este artículo, depende principalmente de la selección de herramientas del desarrollador, el nivel de análisis requerido y las características del generador de perfiles.