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.
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.
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:
Vaya a la sección Rendimiento ->Generador de perfiles de la instancia de Application Insights.
Seleccione Desencadenadores
Configure los desencadenadores de CPU, memoria o solicitud necesarios (si están habilitados) y seleccione Aplicar.
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).
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ónprofile.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 JFCprofile.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 JFCprofile.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?
Java Profiler utiliza Java Flight Recorder (JFR) para generar perfiles su aplicación utilizando 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 creación automática de perfiles se desencadena al alcanzar 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.