Compartir a través de


Azure Monitor Application Insights Profiler para Java

Nota:

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

Java Profiler proporciona un sistema para:

  • 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

Java Profiler utiliza el generador de perfiles JFR proporcionado por la JVM para registrar datos de perfiles, lo que permite a los usuarios descargar las grabaciones JFR posteriormente y analizarlas 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 Perfil de aplicaciones de producción en Azure con Application Insights Profiler para .NET.

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 Perfil ahora (consulte Configuración de Application Insights Profiler para .NET). 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

Al invocar Perfil ahora se habilitará la función del generador de perfiles, y Application Insights aplicará los desencadenadores de SLA de CPU y memoria predeterminados. 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.

Unidad Central de Procesamiento (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.

Captura de pantalla de ejemplo de desencadenador de solicitud

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.

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

  1. Vaya a la sección Rendimiento ->Generador de perfiles de la instancia de Application Insights.

    Captura de pantalla del vínculo para abrir el panel de rendimiento.Captura de pantalla del botón Profiler del panel de rendimiento.

Advertencia

El botón Trazas de perfilador en la parte inferior derecha no es compatible con Java.

  1. Seleccione Desencadenadores

  2. Configure los desencadenadores de CPU, memoria o solicitud necesarios (si están habilitados) y seleccione Aplicar.

    Captura de pantalla de los ajustes del desencadenador.

Advertencia

Java Profiler no es compatible con el desencadenador "Muestreo". 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 un perfil se desencadena y se completa, se puede ver desde la instancia Application Insights dentro de la sección Rendimiento ->Generador de 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).

Captura de pantalla de la configuración y las características de la página de Profiler.

Configuración

La configuración de los parámetros de activación de Java Profiler, como los umbrales y los periodos de generación de perfiles, se establecen en la interfaz de usuario de Application Insights en Rendimiento>Generador de perfiles>Desencadenadores, 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 función de creació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.

Pasos siguientes