Problème

Comment configurer le profileur YourKit Java pour fonctionner avec CQ3.x ou CQ4.x ?

Solution

Installation de YourKit

  1. Téléchargez l’agent YourKit pour votre système d’exploitation (voir les liens au bas de la page).

  2. Installez le profileur YourKit.

  3. Démarrez le profileur YourKit (JDK 1.5 est requis pour l’exécution du profileur).

    • Windows : lancez « YourKit Java Profiler » à partir du menu Démarrer.
    • Linux, Solaris : exécutez YourKit Java Profiler Home > /bin/yjp.sh.
    • Mac OS X : lorsque l’application téléchargée est décompressée, cliquez sur l’icône correspondante.

Activation du profilage

Il est possible d'activer le profilage directement, dans un serveur ide ou même J2EE. Cependant, il est conseillé d'activer le profilage manuellement pour ne pas dépendre des serveurs ide ou J2EE. La procédure diffère d’un système d’exploitation à l’autre.

SE Action
Windows, Java 32 bits Ajoutez <!YourKit Java Profiler Home>\bin\win32 au chemin d'accès
Windows, Java 64 bits Ajoutez <!YourKit Java Profiler Home>\bin\win-amd64 au chemin d'accès
Mac OS X Ajoutez <!YourKit Java Profiler Home>/bin/mac au chemin d'accès DYLD_LIBRARY_PATH
Linux x86, Java 32 bits Ajoutez <!YourKit Java Profiler Home>/bin/linux-x86-32 au chemin d'accès LD_LIBRARY_PATH
Linux AMD64, Java 64 bits Ajoutez <!YourKit Java Profiler Home>/bin/linux-amd64 au chemin d'accès LD_LIBRARY_PATH
Solaris SPARC, 32-bit Java Ajoutez <!YourKit Java Profiler Home>/bin/solaris-sparc-32 au chemin d'accès LD_LIBRARY_PATH
Solaris SPARC, Java 64 bits Ajoutez <!YourKit Java Profiler Home>/bin/solaris-sparc-64 au chemin d'accès LD_LIBRARY_PATH
Solaris x86, Java 32 bits Ajoutez <!YourKit Java Profiler Home>/bin/solaris-x86-32 au chemin d'accès LD_LIBRARY_PATH
Solaris x86, Java 64 bits (AMD64) Ajoutez <!YourKit Java Profiler Home>/bin/solaris-x86-64 au chemin d'accès LD_LIBRARY_PATH

Vérifier l'agent de profilage

Pour vérifier que Java peut charger l’agent de profilage, vous pouvez appeler la commande suivante pour imprimer une description des paramètres d’agent :

  • Java 5 ou 6
    • java -agentlib:yjpagent=help
  • Java 1.3 ou 1.4
    • java -Xrunyjpagent:help

Intégration de la bibliothèque d’agent dans l’application

Pour pouvoir profiler une application Java, il est nécessaire de fournir à l'outil YourKit une interface avec l'application Java Intégrez la bibliothèque d’agent YourKit dans la JVM où s’exécute l’application cible à profiler. Tout d'abord, activez le profilage en fournissant le chemin d'accès à la bibliothèque d'agents du SE sur lequel s'exécute la machine virtuelle Java (voir la section « Activation du profilage ») Incluez des variables d’environnement dans le start-script de votre application.

Par exemple, dans un script de démarrage de CQ sous Linux, procédez comme suit :

#--------------------------------------------------------------------- # enables the YourKit Java Profiler #--------------------------------------------------------------------- YJP_HOME="/home/honwai/yjp-6.0.16/bin/linux-x86-32" export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$YJP_HOME

Ce paramètre rend la bibliothèque d’agents disponible pour la machine virtuelle Java. Il s’agit ensuite d’indiquer à la machine virtuelle Java d’intégrer cette bibliothèque, qui diffère selon la version JVM utilisée :

Version Java Option de machine virtuelle Java
1.3 / 1.4 - Xrunyjpagent Java
version 5 ou plus récente java -agentlib:yjpagent

Vous êtes maintenant prêt à démarrer l’application et le profilage. La bibliothèque d’agents imprime certaines informations sur la sortie standard (pour CQ, il s'agit d’un serveur (logs/startup.log)

[YourKit Java Profiler 6.0.16] Using JVMPI (Linux; 32 bit JVM)

[YourKit Java Profiler 6.0.16] *** HINT ***: utilisera Java 5 (ou une version plus récente) dans la mesure du possible!

[YourKit Java Profiler 6.0.16] Profiler agent is listening on port 10001...

Remarque : Dans CQ4.2, le script de serverctl est désormais plus complexe et autorise plusieurs options au démarrage. Il inclut notamment une option permettant de démarrer la machine virtuelle Java avec la bibliothèque d’agents YourKit. La définition des variables env décrites ci-dessus est toujours obligatoire, mais la définition de l'option JVM supplémentaire ne l'est pas :

linuxbox:/opt/day/cq-4.2/server# ./start --profile

Pour obtenir la liste complète des options disponibles, tapez ./serverctl pour obtenir la liste de toutes les options disponibles.

Connexion avec le profileur YourKit à l’application

Lorsque vous démarrez une application avec la fonction de profilage activée, la bibliothèque d’agents sélectionne automatiquement un port gratuit disponible sur le système. Il n’est pas nécessaire de connaître le port. L’outil YourKit peut se connecter automatiquement à une application profilée en cours d’exécution, localement ou à distance. S’il y a plusieurs applications, vous êtes invité à en sélectionner une.

Il est également possible de spécifier un port dédié si des paramètres de sécurité locaux (par exemple, un pare-feu) n’autorisent pas la sélection de ports arbitraires. Consultez le tableau ci-dessous pour obtenir la liste complète des options pouvant être transmises à la bibliothèque des agents.

Options de la bibliothèque des agents

Option Description
disablealloc (Java 5 ou version plus récente /JVMTI uniquement) : ne pas équiper de bytecode avec les instructions d’enregistrement d'allocation d'objet.
disablecounts (Java 5 ou version plus récente / JVMTI uniquement) : ne pas équiper bytecode avec les instructions de vectorisation de l’unité centrale Seul l’échantillonnage de l’unité centrale est disponible.
disablej2ee (Java 5 et versions nouveau/JVMTI uniquement) ne pas instrumenter le pseudo-code binaire contenant les instructions nécessaires pour le profilage de J2EE.
échantillonnage Lancement de l’application Java avec l’échantillonnage du processeur activé Il n’est pas nécessaire de profiler le processeur dès le début Dans de nombreux cas, il est recommandé de lancer ou d'arrêter le processus de mesurage à partir de l’interface utilisateur ou à l'aide de l’API du profileur.
Traçage Lancez l’application Java avec la fonction de vectorisation de l’unité centrale activée. Il n’est pas nécessaire de profiler le processeur dès le début Dans de nombreux cas, il est préférable de commencer ou d’arrêter la mesure ultérieurement à partir de l’interface utilisateur ou à l'aide de l’API du profileur. Cette option ne peut pas être utilisée en combinaison avec 'disablecounts'.
noj2ee N'effectuez pas le profilage de haut niveau J2EE. Cette option affecte uniquement le profilage du processeur commençant par 'sampling' ou 'tracing'..
alloc Lancez l’application Java avec l’enregistrement d’allocation d’objet démarré. Tous les objets sont enregistrés. Il n’est pas nécessaire d’enregistrer les archives directement depuis le début . Vous pouvez commencer ou arrêter l’enregistrement ultérieurement, à partir du profileur ou de l’API de profileur. Cette option ne peut pas être utilisée en combinaison avec 'disablealloc'.
allocadaptive Lancez l’application Java avec l’enregistrement d’allocation d’objet démarré. Vous pouvez enregistrer autant d’objets que vous le souhaitez, pour limiter les frais et les efforts. Il n’est pas nécessaire d’enregistrer les archives directement depuis le début. Vous pouvez commencer ou arrêter l’enregistrement ultérieurement, à partir du profileur ou de l’API de profileur. Cette option ne peut pas être utilisée en combinaison avec 'disablealloc'.
usedmem=<percent> Capture automatique de l'instantané de la mémoire lorsque la mémoire segmentée utilisée atteint le seuil.
onexit=memory Capturez toujours l’instantané de la mémoire en quittant. L’instantané du processeur est capturé automatiquement si le profilage du processeur est activé lors de la fermeture de l’application profilée.
onexit=telemetry Capture de l’instantané de la télémétrie en sortant. Cette option est automatiquement utilisée lorsque l’application profilée est lancée à partir de l’IDE.
port=<value> Indiquez le port que l’agent de profilage interroge pour communiquer avec le profileur. Par défaut, tous les ports disponibles sont sélectionnés.
onlylocal Autoriser uniquement les connexions locales à l’application profilée
dir=<directory for="for" snapshots="snapshots"> Spécifiez le répertoire dans lequel les instantanés seront créés. Par défaut, c’est le répertoire instantané <user home="home"> / qui sera utilisé.
quiet Efface les messages de diagnostic que l’agent de profilage affiche dans la console.
help Affiche une brève description des paramètres d'agent.

Séparation des options par des virgules. Vérifiez bien que Java nécessite : after -Xrunyjpagent but = after -agentlib:yjpagent

Exemples (Java 5 ou version plus récente) :

java -agentlib:yjpagent FooClass java -agentlib:yjpagent=onexit=memory,dir=c:\MySnapshots FooClass java -agentlib:yjpagent=usedmem=70 FooClass

Exemples (Java 1.3 ou 1.4) :

java -Xrunyjpagent FooClass java -Xrunyjpagent:onexit=memory,dir=c:\MySnapshots FooClass java -Xrunyjpagent:usedmem=70 FooClass

Documentation

Une fois le profileur YourKit installé, une documentation HTML complète est disponible dans le répertoire d'installation, sous <! YourKit Java Profiler Home> /docs/help/index.html. Elle présente en détail l’intégration de la bibliothèque d’agents dans l’application cible qui fait l’objet du profilage. Elle présente également les nombreuses options qui peuvent être transmises à l’agent. Par exemple :

  • Générer un vidage mémoire une fois l'application terminée
  • Générer un vidage mémoire une fois qu'un certain seuil est atteint

Ces options sont disponibles sous <!YourKit Java Profiler Home>/docs/help/agent.html.

La version 7.0 actuelle n’est pas concernée par cette documentation. La documentation de la version 7.0 est disponible sur le serveur d'installation:

  • \\setup\install\profiling\yjp-6.0\docs\help\index.html

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne