Profileur Java pour Azure Monitor Application Insights

Notes

La fonctionnalité Profileur Java est en préversion, à partir de la version 3.4.0.

Le profileur Java Application Insights fournit un système pour :

  • Générer des profils JDK Flight Recorder (JFR) à la demande à partir de la machine virtuelle Java (JVM).
  • Générer automatiquement des profils JFR lorsque certaines conditions de déclencheur sont remplies à partir de la JVM, comme lorsque le processeur ou la mémoire dépasse un seuil configuré.

Vue d’ensemble

Le profileur Java Application Insights utilise le profileur JFR fourni par la JVM pour enregistrer les données de profilage, ce qui permet aux utilisateurs de télécharger les enregistrements JFR ultérieurement et de les analyser pour identifier la cause des problèmes de performances.

Ces données sont collectées à la demande lorsque les conditions de déclenchement sont remplies. Les déclencheurs disponibles sont des seuils par rapport à l’utilisation du processeur, à la consommation de mémoire et aux requêtes (déclencheurs de contrat de niveau de service). Les déclencheurs de requête surveillent les étendues générées par OpenTelemetry et permettent à l’utilisateur de configurer les exigences du contrat de niveau de service (SLA) sur la durée de ces étendues.

Lorsqu’un seuil est atteint, un profil du type et de la durée configurés est collecté et chargé. Ce profil est ensuite visible dans le volet de performances de l’interface utilisateur du portail Application Insights associé.

Avertissement

Par défaut, le profileur JFR exécute le profil « profile-without-env-data ». Un fichier JFR est une série d’événements émis par la machine virtuelle JVM. La configuration « profile-without-env-data » est similaire à la configuration « profile » fournie avec la machine virtuelle JVM, mais certains événements ont été désactivés, notamment ceux qui ont le potentiel de contenir des informations de déploiement sensibles, comme des variables d’environnement, des arguments fournis à la machine virtuelle JVM et des processus s’exécutant sur le système.

Les indicateurs n’étant plus disponibles sont les suivants :

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

Toutefois, vous devez passer en revue tous les indicateurs activés pour vous assurer que les profils ne contiennent pas de données sensibles.

Consultez Configuration du contenu du profil lors de la définition d’une configuration de profileur personnalisé.

Prérequis

  • JVM avec la fonctionnalité JFR (Java Flight Recorder)
    • Java 8 mise à jour 262+
    • Java 11+

Avertissement

OpenJ9 JVM n’est pas pris en charge

Usage

Déclencheurs

Pour obtenir une description plus détaillée des différents déclencheurs disponibles, consultez Vue d’ensemble du profileur.

L’agent Java ApplicationInsights surveille le processeur, la mémoire et la durée des requêtes, comme une transaction commerciale. S’il dépasse un seuil configuré, un profil est déclenché.

Profiler maintenant

Un bouton Profiler maintenant se trouve dans l’interface utilisateur du profileur (consultez paramètres du profileur). La sélection de ce bouton demande immédiatement un profil dans tous les agents attachés à l’instance Application Insights. La durée du profilage par défaut est de deux minutes. Vous pouvez la modifier en remplaçant periodicRecordingDurationSeconds (voir Fichier config).

Avertissement

L’appel du profil active désormais la fonctionnalité du profileur, et Application Insights applique les déclencheurs SLA par défaut du processeur et de la mémoire. Quand votre application enfreint ces contrats SLA, Application Insights collecte des profils Java. Si vous souhaitez désactiver le profilage par la suite, vous pouvez le faire dans le menu des déclencheurs affiché dans Installation.

UC

Le seuil de processeur est un pourcentage de l’utilisation de tous les cœurs disponibles sur le système.

Par exemple, si un cœur d’une machine à huit cœurs était saturé, le pourcentage du processeur serait considéré comme 12,5 %.

Mémoire

Le pourcentage de mémoire est l’occupation actuelle de la région de mémoire foncière (OldGen) par rapport à la taille maximale possible de la région.

L’occupation est évaluée après l’exécution d’une collection foncière. La taille maximale de la région foncière est la taille si le tas de la machine virtuelle Java (JVM) avait atteint sa taille maximale.

Par exemple, prenez le scénario suivant :

  • Le tas Java peut atteindre un maximum de 1 024 Mo.
  • La génération foncière pourrait atteindre 90 % du tas.
  • La taille maximale possible du permanent est de 922 Mo.
  • Votre seuil a été défini via l’interface utilisateur sur 75 % ; par conséquent, votre seuil serait de 75 % de 922 Mo, 691 Mo.

Dans ce scénario, un profil se produit dans les circonstances suivantes :

  • Le garbage collection complet est exécuté
  • L’occupation des régions foncières est supérieure à 691 Mo après la collecte

Requête

Les déclencheurs SLA sont basés sur OpenTelemetry et lancent un profil si certains critères sont remplis.

Chaque configuration de déclencheur individuel est formée comme suit :

  • Name - Un identificateur unique pour le déclencheur.
  • Filter - Filtre les requêtes d’intérêt pour le déclencheur.
  • Aggregation – Calcule le ratio des requêtes ayant dépassé un seuil donné.
    • Threshold – Une valeur minimale (en millisecondes) à partir de laquelle une violation de requête est déterminée.
    • Minimum samples – Le nombre minimum d’échantillons à collecter pour que l’agrégation produise des données. Ce paramètre vise à empêcher le déclenchement de petites tailles d’échantillons.
    • Window - Fenêtre de temps propagée (en millisecondes).
  • Threshold - La valeur de seuil (pourcentage) appliquée à la sortie d’agrégation. Si cette valeur est dépassée, un profil est lancé.

Par exemple, le scénario suivant déclenche un profil si : plus de 75 % des demandes adressées à un point de terminaison spécifique (/users/.*) prennent plus de 30 ms dans une fenêtre de 60 secondes, quand au moins 100 échantillons ont été collectés.

Screenshot of request trigger sample

Installation

Les étapes suivantes vous guident dans l’activation du composant de profilage sur l’agent et la configuration des limites de ressources qui déclenchent un profil en cas de violation.

  1. Configurez les seuils de ressources qui entraînent la collecte d’un profil :

    1. Accédez à la section Performances -> Profileur de l’instance Application Insights. Screenshot of the link to open performance pane.Screenshot of the Profiler button from the Performance pane.

    2. Sélectionnez « Déclencheurs »

    3. Configurez les déclencheurs requis de processeur, de mémoire ou de requête (si activés), puis sélectionnez Appliquer. Screenshot of trigger settings

Avertissement

Le profileur Java ne prend pas en charge le déclencheur « Échantillonnage ». Configurer cela n’aura aucun effet.

Une fois ces étapes terminées, l’agent surveille l’utilisation des ressources de votre processus et déclenche un profil lorsque le seuil est dépassé. Quand un profil est déclenché et est terminé, il est visible dans l’instance Application Insights dans la section Performances –> Profiler. À partir de cet écran, le profil peut être téléchargé. Après cela, le fichier d’enregistrement JFR peut être ouvert et analysé dans l’outil de votre choix, par exemple Oracle JDK Mission Control (JMC).

Screenshot of profiler page features and settings.

Configuration

La configuration des paramètres de déclencheur du profileur, comme les seuils et les périodes de profilage, est définie dans l’interface utilisateur d’Application Insights sous Performances, Profileur, interface utilisateur Déclencheurs, comme décrit dans Installation.

En outre, de nombreux paramètres peuvent être configurés à l’aide de variables d’environnement et du fichier de configuration applicationinsights.json.

Configuration du contenu du profil

Si vous souhaitez fournir une configuration de profil personnalisée, modifiez memoryTriggeredSettings et cpuTriggeredSettings pour fournir le chemin d’accès à un fichier .jfc avec votre configuration requise.

Les profils peuvent être générés/modifiés dans l’interface utilisateur JDK Mission Control (JMC) sous le menu Window->Flight Recording Template Manager et contrôler les indicateurs individuels se trouvent à l’intérieur de Edit->Advanced pour cette interface utilisateur.

Variables d'environnement

  • APPLICATIONINSIGHTS_PREVIEW_PROFILER_ENABLED : booléen (valeur par défaut : true) Active/désactive la fonctionnalité de profilage. Par défaut, la fonctionnalité est activée dans l’agent (à partir de l’agent 3.4.9). Toutefois, même si cette fonctionnalité est activée dans l’agent, les profils ne sont pas collectés, sauf s’ils sont activés dans le portail, comme décrit dans Installation.

Fichier de configuration

Exemple de configuration :

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

memoryTriggeredSettings Cette configuration est utilisée si un profil de mémoire est demandé. Cette valeur peut être une des suivantes :

  • profile-without-env-data (valeur par défaut). Profil avec certains événements sensibles désactivés, consultez la section Avertissement pour plus d’informations.
  • profile. Utilise la configuration profile.jfc fournie avec JFR.
  • Chemin d’accès à un fichier config jfc personnalisé sur le système de fichiers (par exemple /tmp/myconfig.jfc).

cpuTriggeredSettings Cette configuration est utilisée si un profil de processeur est demandé. Cette valeur peut être une des suivantes :

  • profile-without-env-data (valeur par défaut). Profil avec certains événements sensibles désactivés, consultez la section Avertissement pour plus d’informations.
  • profile. Utilise la configuration jfc profile.jfc fournie avec JFR.
  • Chemin d’accès à un fichier config jfc personnalisé sur le système de fichiers (par exemple /tmp/myconfig.jfc).

manualTriggeredSettings Cette configuration est utilisée si un profil manuel est demandé. Cette valeur peut être une des suivantes :

  • profile-without-env-data (valeur par défaut). Profil avec certains événements sensibles désactivés, consultez la section Avertissement pour plus d’informations.
  • profile. Utilise la configuration jfc profile.jfc fournie avec JFR.
  • Chemin d’accès à un fichier config jfc personnalisé sur le système de fichiers (par exemple /tmp/myconfig.jfc).

enableRequestTriggering Indique si le profilage JFR doit être déclenché en fonction de la configuration de la requête. Cette valeur peut être une des suivantes :

  • true Le profilage est déclenché en cas de violation d’un seuil de déclencheur de demande.
  • false (valeur par défaut). La configuration de la requête ne déclenche pas de profilage.

La durée d’enregistrement du profilage periodicRecordingDurationSeconds en secondes lorsqu’une session de profilage est démarrée au moyen du bouton Profil maintenant. La valeur par défaut est 120.

Forum aux questions

Qu’est-ce que le profilage Java d’Azure Monitor Application Insights ?

Le profileur Java Azure Monitor Application Insights utilise Java Flight Recorder (JFR) pour profiler votre application à l’aide d’une configuration personnalisée.

Qu’est-ce que Java Flight Recorder ?

Java Flight Recorder (JFR) est un outil permettant de collecter des données de profilage d’une application Java en cours d’exécution. JFR est intégré à la machine virtuelle Java (JVM) et sert à résoudre les problèmes de performances. En savoir plus sur le runtime Java SE JFR.

Quelles sont les implications en termes de prix et/ou de frais de licence pour l’activation du profilage Java sur Application Insights ?

Le profilage Java est une fonctionnalité gratuite d’Application Insights. La tarification d’Azure Monitor Application Insights est basée sur le coût d’ingestion.

Quelles informations de profilage Java sont collectées ?

Les données de profilage collectées par JFR incluent : les données de profilage de méthode et d’exécution, les données de garbage collection et les profils de verrouillage.

Comment puis-je utiliser le profilage de Java dans Application Insights et visualiser les données ?

L’enregistrement JFR peut être consulté et analysé avec votre outil préféré, par exemple Java Mission Control (JMC).

Les recommandations de diagnostic et de correction des performances sont-elles fournies avec le profilage de Java dans Application Insights ?

« Diagnostics et recommandations de performances » est une nouvelle fonctionnalité bientôt disponible en tant que diagnostics Java dans Application Insights. Vous pouvez vous inscrire pour accéder à la préversion de cette fonctionnalité. L’enregistrement JFR peut être consulté avec Java Mission Control (JMC).

Quelle est la différence entre le profilage Java à la demande et automatique dans Application Insights ?

Le profilage à la demande est déclenché par l’utilisateur en temps réel, tandis que le profilage automatique se fait avec des déclencheurs préconfigurés.

Utilisez Profiler maintenant pour l’option de profilage à la demande. Profiler maintenant profile immédiatement tous les agents attachés à l’instance Application Insights.

Le profilage automatisé est déclenché en cas de violation de seuil de ressource.

Quels déclencheurs de profilage Java puis-je configurer ?

L’agent Java Application Insights prend actuellement en charge la surveillance de la consommation de processeur et de mémoire. Le seuil du processeur est configuré en pourcentage de tous les cœurs disponibles sur la machine. La mémoire est l’occupation actuelle de la région de mémoire foncière (OldGen) par rapport à la taille maximale possible de la région.

Quelles sont les conditions préalables requises pour activer le profilage Java ?

Passez en revue les prérequis en haut de cet article.

Puis-je utiliser le profilage Java pour l’application de microservices ?

Oui, vous pouvez profiler une machine virtuelle JVM exécutant des microservices à l’aide de JFR.