Performance

Informations sur la performance pour l’agent Java OpenTelemetry

L’agent Java OpenTelemetry instrumente votre application en s’exécutant à l’intérieur de la même Machine Virtuelle Java (JVM). Comme tout autre agent logiciel, l’agent Java nécessite des ressources système comme le CPU, la mémoire et la bande passante réseau. L’utilisation des ressources par l’agent est appelée “impact” en ressources de l’agent. L’ agent Java OpenTelemetry a un impact minimal sur les performances du système lors de l’instrumentation des applications JVM, bien que dépendant de plusieurs facteurs.

Certains facteurs qui pourraient augmenter l’impact de l’agent sont liés à l’environnement d’exécution, tels que l’architecture de la machine physique, la fréquence du CPU, la quantité et la vitesse de la mémoire, la température du système et la contention des ressources. D’autres facteurs incluent la virtualisation et la conteneurisation, le système d’exploitation et ses bibliothèques, la version et le fournisseur de la JVM, les paramètres de la JVM, la conception algorithmique du logiciel surveillé, et les dépendances logicielles.

En raison de la complexité des logiciels modernes et de la grande diversité des scénarios de déploiement, il est impossible de donner une estimation unique de l’impact de l’agent. Pour trouver l’impact de tout agent d’instrumentation dans un déploiement donné, vous devez mener des tests en conditions réelles et collecter des mesures directement. Par conséquent, traitez toutes les déclarations sur les performances comme des informations générales et des lignes directrices qui sont sujettes à évaluation dans un système spécifique.

Les sections suivantes décrivent les exigences minimales de l’agent Java OpenTelemetry, ainsi que les contraintes potentielles ayant un impact sur les performances, et des lignes directrices pour optimiser les performances de l’agent.

Lignes directrices pour réduire l’impact de l’agent

Les bonnes pratiques et les techniques suivantes peuvent aider à réduire la consommation en ressources de l’agent Java.

Configurer l’échantillonnage des traces

Le volume de spans traités par l’instrumentation peut avoir un impact sur la consommation de ressources de l’agent. Vous pouvez configurer l’échantillonnage des traces pour ajuster le volume de spans et réduire l’utilisation des ressources. Voir Échantillonnage.

Désactiver des instrumentations spécifiques

Vous pouvez réduire davantage l’impact de l’agent en désactivant les instrumentations qui ne sont pas nécessaires ou qui produisent trop de spans. Pour désactiver une instrumentation, utilisez -Dotel.instrumentation.<name>.enabled=false ou la variable d’environnement OTEL_INSTRUMENTATION_<NAME>_ENABLED, où <name> est le nom de l’instrumentation.

Par exemple, l’option suivante désactive l’instrumentation JDBC : -Dotel.instrumentation.jdbc.enabled=false

Allouer plus de mémoire pour l’application

Augmenter la taille maximale du tas de la JVM en utilisant l’option -Xmx<size> peut aider à atténuer les problèmes de consommation de ressources de l’agent, car les instrumentations peuvent générer un grand nombre d’objets à courte durée de vie en mémoire.

Réduire l’instrumentation manuelle à ce dont vous avez besoin

Trop d’instrumentation manuelle pourrait introduire des inefficacités qui augmentent l’impact de l’agent. Par exemple, utiliser @WithSpan sur chaque méthode entraîne un volume élevé de spans, ce qui à son tour augmente le bruit dans les données et consomme plus de ressources système.

Provisionner des ressources adéquates

Assurez-vous de provisionner suffisamment de ressources pour votre instrumentation et pour le Collecteur. La quantité de ressources telles que la mémoire ou le disque dépend de l’architecture de votre application et de vos besoins. Par exemple, une configuration courante consiste à exécuter l' application instrumentée sur le même hôte que le Collecteur OpenTelemetry. Dans ce cas, envisagez de dimensionner correctement les ressources pour le Collecteur et d’optimiser ses paramètres. Voir Mise à l’échelle.

Contraintes ayant un impact sur les performances de l’agent Java

En général, plus vous collectez de télémétrie de votre application, plus l' impact de l’agent est important. Par exemple, générer les traces de méthodes qui ne sont pas pertinentes pour votre application peut produire une surcharge considérable de l’agent car les traces pour de telles méthodes sont plus coûteuse en calcul que l’exécution de la méthode elle-même. De même, les labels à haute cardinalité dans les métriques peuvent augmenter l’utilisation de la mémoire. La journalisation de débogage, si elle est activée, augmente également les opérations d’écriture sur le disque et l’utilisation de la mémoire.

Certaines instrumentations, par exemple JDBC ou Redis, produisent des volumes élevés de spans qui augmentent l’impact de l’agent. Pour plus d’informations sur la façon de désactiver les instrumentations inutiles, voir Désactiver des instrumentations spécifiques.

Dépannage des problèmes de l’impact de l’agent

Lors du dépannage des problèmes d’impact de l’agent, procédez comme suit :

  • Vérifiez les exigences minimales. Voir Prérequis.
  • Utilisez la dernière version compatible de l’agent Java.
  • Utilisez la dernière version compatible de votre JVM.

Envisagez de prendre les mesures suivantes pour diminuer l’impact de l’agent :

  • Si votre application approche des limites de mémoire, envisagez de lui donner plus de mémoire.
  • Si votre application utilise tout le CPU, vous pourriez vouloir la mettre à l’échelle horizontalement.
  • Essayez de désactiver ou de procéder à des réglages sur les métriques.
  • Ajustez les paramètres d’échantillonnage des traces pour réduire le volume de spans.
  • Désactivez des instrumentations spécifiques.
  • Contrôlez l’instrumentation manuelle pour vérifier qu’il n’y a pas de génération inutile de spans.

Lignes directrices pour mesurer l’impact de l’agent

Mesurer l’impact de l’agent dans votre propre environnement fournit des données précises sur l’impact de l’instrumentation sur les performances de votre application. Les lignes directrices suivantes décrivent les étapes générales pour collecter et comparer des mesures fiables des performances de l’agent.

Décidez de ce que vous voulez mesurer

Différents utilisateurs de votre application peuvent remarquer différents aspects de l’impact de l’agent. Par exemple, alors que les utilisateurs finaux peuvent remarquer une dégradation de la latence du service, les utilisateurs intensifs avec de lourdes charges de travail accordent plus d’attention à la surcharge du CPU. D’un autre côté, les utilisateurs qui déploient fréquemment, par exemple en raison de charges de travail élastiques, se soucient davantage du temps de démarrage.

Réduisez vos mesures aux facteurs qui ont un impact sur l’expérience utilisateur, afin que vos ensembles de données ne contiennent pas d’informations non pertinentes. Quelques exemples de mesures :

  • Utilisation du CPU: moyenne par l’utilisateur, maximale par l’utilisateur et moyenne de l’ensemble de la machine
  • Mémoire totale allouée et tas maximum utilisé
  • Temps de pause de la collecte des déchets
  • Temps de démarrage en millisecondes
  • Latence de service moyenne et au 95e centile (p95)
  • Débit moyen de lecture et d’écriture réseau

Préparez un environnement de test approprié

En mesurant l’impact de l’agent dans un environnement de test contrôlé, vous pouvez mieux identifier les facteurs affectant les performances. Lors de la préparation d’un environnement de test, procédez comme suit :

  1. Assurez-vous que la configuration de l’environnement de test ressemble à la production.
  2. Isolez l’application testée des autres services qui pourraient interférer.
  3. Désactivez ou supprimez tous les services système inutiles sur l’hôte de l’application.
  4. Assurez-vous que l’application dispose de suffisamment de ressources système pour gérer la charge de travail de test.

Créez une batterie de tests réalistes

Concevez les tests que vous exécuterez sur l’environnement de test pour qu’ils ressemblent autant que possible aux charges de travail nominales. Par exemple, si certains points de terminaison de l’API REST de votre service sont susceptibles de recevoir des volumes de requêtes élevés, créez un test qui simule un trafic réseau intense.

Pour les applications Java, utilisez une phase d’échauffement avant de commencer les mesures. La JVM est une machine très dynamique qui effectue un grand nombre d’optimisations grâce à la compilation juste-à-temps (JIT). La phase d’échauffement aide l’application à terminer la plupart de ses chargements de classes et donne au compilateur JIT le temps d’exécuter la majorité des optimisations.

Assurez-vous d’exécuter un grand nombre de requêtes et de répéter le passage de test plusieurs fois. Cette répétition aide à garantir un échantillon de données représentatif. Incluez des scénarios d’erreur dans vos données de test. Simulez un taux d’erreur similaire à celui d’une charge de travail normale, généralement entre 2 % et 10 %.

Collectez des mesures comparables

Pour identifier les facteurs qui pourraient affecter les performances et causer une surconsommation de ressources de l’agent, collectez des mesures dans le même environnement après avoir modifié un seul facteur ou une seule condition.

Analysez les données de consommation de l’agent

Après avoir collecté des données de plusieurs passages, vous pouvez tracer les résultats dans un graphique ou comparer les moyennes en utilisant des tests statistiques pour vérifier les différences significatives.

Considérez que différentes piles, applications et environnements peuvent entraîner des caractéristiques opérationnelles différentes et des résultats de mesure de l’impact de l’agent différents.


Dernière modification August 4, 2025: [fr] Translation of Zero Code Java docs (#7389) (a409f82a)