Java Profilers: Por qué necesitas estos 3 tipos diferentes

Depurar los problemas de rendimiento en producción puede ser un dolor y, en algunos casos, imposible sin las herramientas adecuadas. El perfilado de Java ha existido desde siempre, pero los perfiladores de java en los que la mayoría de los desarrolladores piensan son de un solo tipo: los perfiladores estándar de la JVM.

Sin embargo, usar un tipo de perfilador no es suficiente.

Suponga que está analizando el rendimiento de su aplicación. Hay múltiples actividades de perfilado que puede ejecutar. Generalmente, los perfiladores estándar se encargan del perfilado de la memoria, del perfilado de la CPU y del perfilado de los hilos.

Pero incluso con toda esta cobertura, al utilizar una combinación de múltiples perfiladores, encontrará más problemas de rendimiento. Esto se debe a que cada perfilador es mejor en un aspecto determinado para perseguir un error de rendimiento.

Perfilador de Java

En este post, hablaremos de los tres tipos de perfiladores de Java y por qué los necesitamos todos mientras desarrollamos la aplicación. Empezaremos con los tipos y profundizaremos en cada uno de ellos.

Vamos a echar un vistazo a los tres tipos diferentes de perfiladores de Java:

  1. Perfiladores estándar de la JVM que rastrean cada detalle de la JVM (CPU, hilo, memoria, recolección de basura, etc).
  2. Perfiladores ligeros que destacan su aplicación con un poco de abstracción.
  3. Herramientas de gestión del rendimiento de las aplicaciones (APM) utilizadas para supervisar las aplicaciones en vivo en entornos de producción.
Nueva llamada a la acción

Perfiles JVM estándar

Productos como VisualVM, JProfiler, YourKit y Java Mission Control.

Un perfilador Java estándar ciertamente proporciona la mayor cantidad de datos, pero no necesariamente la información más útil. Esto depende del tipo de tarea de depuración.

Los perfiladores de JVM rastrearán todas las llamadas a métodos y el uso de memoria. Esto permite a un desarrollador para bucear en la estructura de llamadas en cualquier ángulo que elijan.

Pros:

  • Grande para el seguimiento de las fugas de memoria, los perfiles estándar detalle todo el uso de la memoria por la JVM y que las clases / objetos son responsables. La capacidad de ejecutar manualmente la recolección de basura y luego revisar el consumo de memoria puede fácilmente brillar un foco en las clases y procesos que se aferran a la memoria en el error.
  • Bueno para el seguimiento del uso de la CPU, un perfilador de Java por lo general proporciona una función de muestreo de la CPU para rastrear y agregar el tiempo de la CPU por clase y método para ayudar a cero en los puntos calientes.

Cons:

  • Requiere una conexión directa a la JVM monitoreada; esto termina limitando el uso a los entornos de desarrollo en la mayoría de los casos. (Nota: algunos perfiladores pueden trabajar fuera de hilo y volcados de memoria de una manera limitada.)
  • Se ralentiza su aplicación; una buena cantidad de potencia de procesamiento se requiere para el alto nivel de detalle proporcionado.

Lightweight Java Transaction Profilers

Productos como XRebel y Stackify Prefix.

Los perfiladores ligeros adoptan un enfoque diferente en el seguimiento de su aplicación inyectándose en el código.

  • Los perfiladores de aspectos utilizan la programación orientada a aspectos (AOP) para inyectar código en el inicio y el final de los métodos especificados. El código inyectado puede iniciar un temporizador y luego informar el tiempo transcurrido cuando el método termina. Estos perfiladores son sencillos de configurar, pero hay que saber qué perfilar. Para ver un ejemplo, consulte Spring AOP Method Profiling.
  • Los perfiladores de Java Agent utilizan la API de Java Instrumentation para inyectar código en su aplicación. Este método tiene un mayor acceso a su aplicación ya que el código está siendo reescrito a nivel de bytecode. Esto permite instrumentar cualquier código que se ejecute en su aplicación, ya sea código escrito por usted o bibliotecas de terceros de las que depende su aplicación. Consulte esta introducción a los Agentes Java para ver cómo funciona todo esto.

Los perfiladores Aspect son bastante fáciles de configurar, pero están limitados en cuanto a lo que pueden monitorizar y se ven entorpecidos por el hecho de tener que detallar todo lo que se quiere rastrear. Los agentes de Java tienen una gran ventaja en su profundidad de seguimiento, pero son mucho más complicados de escribir.

Stackify Prefix es un perfilador de Java orientado al desarrollador que utiliza el método del perfilador del agente de Java detrás de las escenas.

Lo bueno es que Prefix ya conoce las clases más deseadas y las bibliotecas de terceros que los desarrolladores quieren instrumentar, por lo que no tiene que detallarlas todas. Además, toma todas las estadísticas de la instrumentación y las muestra de manera simple y comprensible.

Como ejemplo, cuando se ejecuta una aplicación utilizando Hibernate, Prefix no sólo detallará el tiempo transcurrido para las consultas, sino que también muestra los valores de los parámetros para el SQL generado. Cuando su aplicación llama a una API SOAP/REST, Prefix proporciona el contenido de la solicitud y la respuesta.

Ejemplo de prefijo del perfil de Java
Captura de pantalla de Prefix: Tomcat Web Request Trace

Low Overhead, Java JVM Profiling in Production (APM)

Todos los perfiladores hasta ahora han sido grandes para el desarrollo, pero el seguimiento de cómo su sistema se desempeña en la producción es crítico.

La producción es siempre un paisaje diferente-las configuraciones de desarrollo y de puesta en escena no suelen tener los mismos conjuntos de datos y carga.

Las herramientas APM de Java suelen utilizar el método del perfilador de Java Agent pero con diferentes reglas de instrumentación para permitir que se ejecuten sin afectar al rendimiento en las producciones. El truco con estos perfiladores es proporcionar la información correcta de una manera inteligente para no ocupar ciclos de CPU.

Retrace de Stackify es una herramienta APM que utiliza la misma tecnología que Stackify Prefix con algunos ajustes para ejecutarse sin problemas en entornos de puesta en escena y producción.

Esto se hace mediante la agregación de estadísticas de tiempo y trazas de muestreo. Esto le da visibilidad a nivel de método al código de su aplicación que se está ejecutando en la producción.

Así que cuando usted tiene una solicitud web lenta, que se traducirá en un rastro que aparece en Retrace. A partir de ahí se puede bucear y ver qué métodos son los culpables.

java profiler performance aggregation

Retrace Screenshot: Web Request Aggregation over 4 hours

java profiler tomcat trace
Retrace Screenshot: Tomcat Web Request Trace

¿Por qué necesita los 3 perfiles para su aplicación?

Los perfiles estándar son buenos para encontrar problemas de rendimiento en la etapa de desarrollo. Pero la producción es un escenario diferente. El comportamiento de su aplicación puede cambiar en función del tráfico entrante, la solicitud del servidor, la respuesta y muchas otras cosas.

Entonces, ¿cuál es la solución para el entorno de producción? Las herramientas APM son la respuesta. Las herramientas APM se dirigen al entorno de producción y proporcionan un informe sobre el rendimiento de su aplicación.

Así, los perfiladores estándar ayudan en el desarrollo y las herramientas APM ayudan en la producción. Puede que te preguntes cuál es la necesidad de los perfiladores ligeros de transacciones.

Bueno, los perfiladores ligeros siguen un enfoque diferente a la creación de perfiles de código. Se inyectan directamente en el código, especialmente al principio y al final de un método.

También son fáciles de configurar y consumen relativamente menos recursos. Esto es muy útil para las aplicaciones que utilizan la memoria de transacciones de hardware. Esas aplicaciones exigen herramientas de análisis refinadas que señalen exactamente qué método o función está causando problemas de rendimiento.

Sin duda, podemos decir que si estás desarrollando una aplicación compleja, necesitarás los tres perfiladores. Cada tipo de perfilador tiene un enfoque único que comprueba una aplicación en busca de problemas de rendimiento.

La encuesta de RebelLab también mostró que la mayoría de las empresas utilizan múltiples perfiladores de código para encontrar problemas de rendimiento en su aplicación.

¿Por qué son tan caros algunos perfiladores de Java?

XRebel es una herramienta genial, pero cuesta 365 dólares al año. Stackify Prefix es gratuito y proporciona gran parte de la misma funcionalidad.

El mayor problema con las soluciones APM es definitivamente su precio. Tradicionalmente han sido tan caras que sólo las empresas más grandes podían permitírselas.

No tiene mucho sentido gastar aproximadamente 100 dólares al mes en un servidor en Azure o AWS y luego gastar casi 200 dólares al mes por un producto como New Relic.

¡Las herramientas de monitorización no deberían costar más que los servidores!

Leer más: APM Pricing Is Now Affordable for All Developers, and Why They Should Care

Wrapping It Up

Ahora que ha aprendido sobre los tres tipos de perfiladores de código Java, es el momento de decidir si realmente necesita todos ellos.

La respuesta está en la naturaleza de su aplicación.

Si es pequeña como un negocio local o el sistema de gestión de gastos de una tienda, la creación de perfiles es muy simple. Un perfilador estándar hará el trabajo.

Si está desarrollando una aplicación web como el sistema de seguimiento de un servicio de mensajería, su aplicación puede ser accedida por miles de usuarios. En ese caso, también necesitará herramientas APM para el entorno de producción.

Por último, si su aplicación es para sistemas embebidos, necesitará las tres.

Elija bien, y diviértase desarrollando una aplicación que ofrezca un rendimiento óptimo.

Iniciar prueba gratuita

.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.