Java Profiler para Application Insights de Azure Monitor

Nota

La característica Java Profiler se encuentra en versión preliminar desde la versión 3.4.0.

Java Profiler de Application Insights proporciona un sistema para llevar a cabo las siguientes acciones:

  • Generar perfiles de JDK Flight Recorder (JFR) a petición desde el entorno Máquina virtual Java (JVM).
  • Generar perfiles de JFR automáticamente cuando se cumplen ciertas condiciones de desencadenamiento desde JVM, como el hecho de que la CPU o la memoria superen un umbral configurado.

Información general

El generador de perfiles de Java de Application Insights usa el generador de perfiles de JFR que proporciona JVM para registrar datos de generación de perfiles, lo que permite a los usuarios descargar los registros de JFR más adelante y analizarlos para identificar la causa de los problemas de rendimiento.

Estos datos se recopilan a petición cuando se cumplen las condiciones de desencadenamiento. Los desencadenadores disponibles son umbrales sobre el uso de CPU, el consumo de memoria y la solicitud (desencadenadores de contrato de nivel de servicio). Los desencadenadores de solicitudes supervisan los intervalos generados por OpenTelemetry y permiten al usuario configurar los requisitos del contrato de nivel de servicio (SLA) durante la duración de esos intervalos.

Cuando se alcanza un umbral, se recopila y carga un perfil de la duración y el tipo configurados. Este perfil es visible en el panel de rendimiento de la interfaz de usuario del portal de Application Insights asociado.

Advertencia

El generador de perfiles de JFR ejecuta de manera predeterminada el perfil "profile-without-env-data". Un archivo JFR es una serie de eventos que emite JVM. La configuración "profile-without-env-data" es similar a la configuración "profile" que se incluye con JVM; sin embargo, se han deshabilitado algunos eventos que tienen la posibilidad de contener información confidencial sobre la implementación, como variables de entorno, argumentos proporcionados a JVM y procesos que se ejecutan en el sistema.

Las marcas que ya no están disponibles son las siguientes:

  • jdk.JVMInformation
  • jdk.InitialSystemProperty
  • jdk.OSInformation
  • jdk.InitialEnvironmentVariable
  • jdk.SystemProcess

Sin embargo, debe revisar todas las marcas habilitadas para asegurarse de que los perfiles no contengan datos confidenciales.

Consulte Configuración del contenido del perfil al establecer una configuración personalizada del generador de perfiles.

Requisitos previos

  • JVM con la funcionalidad Java Flight Recorder (JFR)
    • Java 8, actualización 262+
    • Java 11+

Advertencia

No se admite OpenJ9 JVM.

Uso

Desencadenadores

Para obtener una descripción más detallada de los distintos desencadenadores disponibles, consulte la información general sobre el generador de perfiles.

El agente de Java de ApplicationInsights supervisa la CPU, la memoria y la duración de la solicitud, como una transacción empresarial. Si infringe un umbral configurado, se desencadena un perfil.

Generar perfiles ahora

En la interfaz de usuario del generador de perfiles hay un botón Generar perfiles ahora (consulte la configuración del generador de perfiles). Al seleccionar este botón, se solicitará inmediatamente un perfil en todos los agentes asociados a la instancia de Application Insights. La duración predeterminada de la generación de perfiles es de dos minutos. Puede cambiarla invalidando periodicRecordingDurationSeconds (consulte Archivo de configuración).

Advertencia

La invocación de perfil ahora habilitará la característica de generador de perfiles y, además, Application Insights aplicará desencadenadores predeterminados de CPU y SLA de memoria. Cuando la aplicación infrinja esos acuerdos de nivel de servicio, Application Insights recopilará perfiles de Java. Si deseara deshabilitar el generación de perfiles más adelante, podrá hacerlo en el menú desencadenador que se muestra en Instalación.

CPU

El umbral de CPU es un porcentaje de la utilización de todos los núcleos disponibles en el sistema.

Por ejemplo, si un núcleo de una máquina de ocho núcleos estuviera saturado, el porcentaje de CPU se consideraría 12,5 %.

Memoria

El porcentaje de memoria es la ocupación de la región de memoria de antigüedad (OldGen) actual con respecto al tamaño máximo posible de la región.

La ocupación se evalúa después de que se haya realizado una recopilación de antigüedad. El tamaño máximo de la región de antigüedad es el tamaño que sería si el montón de Máquina virtual Java (JVM) creciese hasta su tamaño máximo.

Por ejemplo, póngase en el siguiente escenario:

  • El montón de Java podría crecer hasta un máximo de 1024 MB.
  • La generación de antigüedad podría crecer hasta el 90 % del montón.
  • El tamaño máximo posible de la antigüedad serían 922 MB.
  • El umbral se estableció a través de la interfaz de usuario en un 75 %, por lo que el umbral sería el 75 % de 922 MB, es decir, 691 MB.

En este escenario, se genera un perfil en las siguientes circunstancias:

  • Se ejecuta la recolección completa de elementos no utilizados.
  • La ocupación de las regiones de antigüedad es superior a 691 MB después de la recolección.

Solicitar

Los desencadenadores del SLA se basan en OpenTelemetry e inician un perfil si se cumplen determinados criterios.

Cada configuración de desencadenador individual se forma de la siguiente manera:

  • Name: un identificador único del desencadenador.
  • Filter: filtra las solicitudes de interés para el desencadenador.
  • Aggregation: calcula la proporción de solicitudes que infringieron un umbral determinado.
    • Threshold: valor mínimo (en milisegundos) en el que se determina que se produce una infracción de solicitud.
    • Minimum samples: el número mínimo de muestras que se deben recopilar para que la agregación genere datos; este valor permite evitar que se desencadenen tamaños de muestra pequeños.
    • Window: período de tiempo gradual (en milisegundos).
  • Threshold: valor de umbral (porcentaje) aplicado a la salida de agregación. Si se supera este valor, se inicia un perfil.

Por ejemplo, el siguiente escenario desencadenaría un perfil si: más del 75 % de las solicitudes a un punto de conexión específico (/users/.*) tardan más de 30 ms en un período de 60 segundos, cuando se recopilaron al menos 100 muestras.

Screenshot of request trigger sample

Instalación

Los pasos siguientes le guían a través de la habilitación del componente de generación de perfiles en el agente y la configuración de límites de recursos que desencadenan un perfil si se superan.

  1. Configure los umbrales de recursos que hacen que se recopile un perfil:

    1. Vaya a la sección Rendimiento -> Profiler de la instancia de Application Insights. Screenshot of the link to open performance pane.Screenshot of the Profiler button from the Performance pane.

    2. Seleccione Desencadenadores.

    3. Configure los desencadenadores de CPU, memoria o solicitud necesarios (si están habilitados) y seleccione Aplicar. Screenshot of trigger settings

Advertencia

El generador de perfiles de Java no admite el desencadenador "Sampling". Si lo configura, no pasará nada.

Una vez completados estos pasos, el agente supervisará la utilización de recursos del proceso y desencadenará un perfil cuando se supere el umbral. Cuando se haya desencadenado y completado un perfil, se puede ver desde la instancia de Application Insights, en la sección Rendimiento -> Generar perfiles. Desde esa pantalla se puede descargar el perfil y, después de eso, el archivo de registros JFR se puede abrir y analizar en una herramienta de su elección, por ejemplo Oracle JDK Mission Control (JMC).

Screenshot of profiler page features and settings.

Configuración

La configuración del desencadenamiento del generador de perfiles, como los umbrales y los períodos de generación de perfiles, se establece en la interfaz de usuario de Application Insights, en las interfaces de usuario Rendimiento, Profiler, Desencadenadores, tal y como se describe en Instalación.

Además, muchos parámetros se pueden configurar mediante variables de entorno y el archivo de configuración applicationinsights.json.

Configuración del contenido del perfil

Si quiere proporcionar una configuración de perfil personalizada, modifique memoryTriggeredSettings y cpuTriggeredSettings para proporcionar la ruta de acceso a un archivo .jfc con la configuración necesaria.

Los perfiles se pueden generar o editar en la interfaz de usuario de JDK Mission Control (JMC) en el menú Window->Flight Recording Template Manager y el control de las marcas individuales se encuentra en Edit->Advanced, en esta interfaz de usuario.

Variables de entorno

  • APPLICATIONINSIGHTS_PREVIEW_PROFILER_ENABLED: booleano (valor predeterminado: true). Habilita o deshabilita la característica de generación de perfiles. De forma predeterminada, la característica está habilitada dentro del agente (desde el agente 3.4.9). Sin embargo, aunque esta característica estuviera habilitada en el agente, los perfiles no se recopilan a menos que se habiliten en el portal, tal y como se describe en Instalación.

Archivo de configuración

Configuración de ejemplo:

{
  "preview": {
    "profiler": {
      "enabled": true,
      "cpuTriggeredSettings": "profile-without-env-data",
      "memoryTriggeredSettings": "profile-without-env-data",
      "manualTriggeredSettings": "profile-without-env-data",
      "enableRequestTriggering": true,
      "periodicRecordingDurationSeconds": 60
    }
  }
}

memoryTriggeredSettings: esta configuración se usa si se solicita un perfil de memoria. Este valor puede ser uno de los siguientes:

  • profile-without-env-data (valor predeterminado). Perfil con determinados eventos confidenciales deshabilitados. Consulte la sección Advertencia para obtener más información.
  • profile. Usa la configuración profile.jfc que se incluye con JFR.
  • Ruta de acceso a un archivo de configuración JFC personalizado en el sistema de archivos, por ejemplo, /tmp/myconfig.jfc.

cpuTriggeredSettings: esta configuración se usa si se solicita un perfil de CPU. Este valor puede ser uno de los siguientes:

  • profile-without-env-data (valor predeterminado). Perfil con determinados eventos confidenciales deshabilitados. Consulte la sección Advertencia para obtener más información.
  • profile. Usa la configuración JFC profile.jfc que se incluye con JFR.
  • Ruta de acceso a un archivo de configuración JFC personalizado en el sistema de archivos, por ejemplo, /tmp/myconfig.jfc.

manualTriggeredSettings: esta configuración se usa si se solicita un perfil manual. Este valor puede ser uno de los siguientes:

  • profile-without-env-data (valor predeterminado). Perfil con determinados eventos confidenciales deshabilitados. Consulte la sección Advertencia para obtener más información.
  • profile. Usa la configuración JFC profile.jfc que se incluye con JFR.
  • Ruta de acceso a un archivo de configuración JFC personalizado en el sistema de archivos, por ejemplo, /tmp/myconfig.jfc.

enableRequestTriggering Si se debe desencadenar la generación de perfiles de JFR en función de la configuración de la solicitud. Este valor puede ser uno de los siguientes:

  • true La generación de perfiles se desencadena si se infringe un umbral de desencadenador de solicitud.
  • false (valor predeterminado). La configuración de la solicitud no desencadena la generación de perfiles.

periodicRecordingDurationSeconds: duración de la grabación de la generación perfiles en segundos cuando se inicia una sesión de generación de perfiles mediante el botón Generar perfiles ahora. El valor predeterminado es 120.

Preguntas más frecuentes

¿Qué es la generación de perfiles de Java de Application Insights de Azure Monitor?

El generador de perfiles de Java de Application Insights de Azure Monitor usa Java Flight Recorder (JFR) para generar perfiles de la aplicación mediante una configuración personalizada.

¿Qué es Java Flight Recorder?

Java Flight Recorder (JFR) es una herramienta para recopilar datos de generación de perfiles de una aplicación Java en ejecución. JFR se integra en el entorno de Máquina virtual Java (JVM) y se usa para solucionar problemas de rendimiento. Obtenga más información sobre Java SE JFR Runtime.

¿Cuáles son las implicaciones en términos de cuotas de licencia o precios de habilitar la generación de perfiles de Java de Application Insights?

La generación de perfiles de Java es una característica gratuita que se incluye con Application Insights. Los precios de Application Insights de Azure Monitor se basan en el costo de ingesta.

¿Qué información de generación de perfiles de Java se recopila?

Entre los datos de generación de perfiles que recopila JFR se incluyen los siguientes: datos de generación de perfiles de métodos y ejecuciones, datos de recolección de elementos no utilizados y perfiles de bloqueo.

¿Cómo puedo usar la generación de perfiles de Java de Application Insights y visualizar los datos?

Los registros de JFR se puede ver y analizar con su herramienta preferida, como por ejemplo Java Mission Control (JMC).

¿Se proporcionan recomendaciones de corrección y diagnóstico de rendimiento con la generación de perfiles de Java de Application Insights?

"Recomendaciones y diagnósticos de rendimiento" es una nueva característica que está disponible como diagnósticos de Java de Application Insights. Puede registrarse para obtener la versión preliminar de esta característica. Los registros de JFR se puede ver con Java Mission Control (JMC).

¿Cuál es la diferencia entre la generación de perfiles de Java a petición y automática en Application Insights?

La generación de perfiles a petición la desencadena el usuario en tiempo real, mientras que la generación de perfiles automática se lleva a cabo con desencadenadores preconfigurados.

Use Generar perfiles ahora para la opción de generación de perfiles a petición. Generar perfiles ahora genera perfiles inmediatamente de todos los agentes adjuntos a la instancia de Application Insights.

La generación de perfiles automatizada se desencadena cuando se supera un umbral de recursos.

¿Qué desencadenadores de generación de perfiles de Java puedo configurar?

Actualmente, el agente de Java de Application Insights admite la supervisión del consumo de CPU y memoria. El umbral de CPU se configura como un porcentaje de todos los núcleos disponibles en la máquina. La memoria es la ocupación de la región de memoria de antigüedad (OldGen) actual con respecto al tamaño máximo posible de la región.

¿Cuáles son los requisitos previos necesarios para habilitar la generación de perfiles de Java?

Consulte la sección Requisitos previos incluida en el inicio de este artículo.

¿Puedo usar la generación de perfiles de Java para la aplicación de microservicios?

Sí, puede generar perfiles de un entorno JVM que ejecute microservicios mediante JFR.