Utilisation du profileur HPROF
HPROF est un profileur de démonstration fourni avec le SDK IBM® qui utilise JVMTI pour collecter et enregistrer des informations sur l'exécution Java™ . Vous pouvez utiliser HPROF pour identifier les parties d'un programme qui utilisent le plus de mémoire et de temps UC.
java -Xrunhprof[:<option>=<value>,...] <classname>
Lorsque vous exécutez Java avec HPROF, un fichier est créé à la fin du programme. Ce fichier est placé dans le répertoire de travail en cours et s'appelle java.hprof.txt (java.hprof si le format binaire est utilisé) si vous ne définissez pas un autre nom de fichier. Ce fichier contient différentes sections, mais le format et le contenu exacts dépendent des options sélectionnées.
Si vous avez besoin de plus d'informations sur HPROF que celles contenues dans cette section, voir https://docs.oracle.com/javase/8/docs/technotes/samples/hprof.html.
La commande java -Xrunhprof:help
affiche les options disponibles :
- heap=dump|sites|all
- Cette option permet d'analyser l'utilisation de la mémoire. Elle indique à HPROF de générer des traces de pile à partir desquelles vous pouvez déterminer où de la mémoire a été allouée. Si vous utilisez l'option heap=dump, vous générez un vidage de tous les objets en vie dans le tas. Avec heap=sites, vous pouvez obtenir la liste des sites commençant par les objets alloués les plus importants. La valeur par défaut all génère deux types de sorties.
- cpu=samples|times|old
- L'option cpu fournit des informations utiles pour déterminer les emplacements où le traitement est le plus long. Si vous affectez à cpu la valeur samples, la machine virtuelle Java suspend l'exécution et identifie l'appel de méthode actif. Si le taux d'échantillonnage est suffisamment élevé, vous obtenez une image précise des emplacements dans lesquels l'exécution du programme est la plus longue. Si vous réglez cpu sur times, vous recevrez des mesures précises du nombre de fois où chaque méthode a été appelé et du temps qu'a pris chaque exécution. Cette option est plus précise, mais ralentit l'exécution du programme. Si vous réglez cpu sur old, les données de profilage seront générées dans l'ancien format HPROF.
- interval=y|n
- L'option interval s'applique uniquement à cpu=samples et contrôle le délai d'inactivité de l'unité d'exécution d'échantillonnage entre les échantillons des piles d'unité d'exécution.
- monitor=y|n
- L'option monitor permet de déterminer l'impact de la synchronisation sur les performances de l'application. Les moniteurs implémentent la synchronisation des unités d'exécution. Par conséquent, l'obtention d'informations sur les moniteurs peut permettre de connaître le délai d'accès des unités d'exécution aux ressources verrouillées. HPROF fournit également des instantanés des moniteurs utilisés. Ces informations sont utiles pour détecter les interblocages.
- format=a|b
- Par défaut, le fichier de sortie a le format ASCII. Affectez à format la valeur 'b' pour spécifier le format binaire qui est nécessaire pour certains outils, tels que Heap Analysis.
- file=<nom_fichier>
- L'option file permet de changer le nom du fichier de sortie. Le nom par défaut d'un fichier ASCII est java.hprof.txt. Le nom par défaut d'un fichier binaire est java.hprof.
- force=y|n
- Généralement, la valeur par défaut (force=y) remplace les informations existantes dans le fichier de sortie. Par conséquent, si vous utilisez plusieurs machines virtuelles Java qui s'exécutent avec HPROF activé, vous devez utiliser force=n qui ajoute des caractères au nom de fichier de sortie.
- net=<hôte>:<port>
- Pour envoyer la sortie sur le réseau et non pas dans un fichier local, utilisez l'option net.
- depth=<taille>
- L'option depth indique le nombre de cadres de méthode à afficher dans une trace de pile. La valeur par défaut est 4.
- thread=y|n
- Si vous réglez l'option thread à y, l'ID d'unité d'exécution sera indiqué en regard de chaque trace. Cette option est utile si vous ne parvenez pas à identifier clairement l'unité d'exécution associée à la trace. Ce type de problème peut apparaître dans une application à unités d'exécution multiples.
- doe=y|n
- Par défaut, les informations de profil sont collectées à la fin de l'exécution d'une application. Pour collecter les données de profilage au cours de l'exécution, affectez à doe (vidage lors de la fin de l'exécution) la valeur n.
- msa=y|n
- Cette fonction n'est pas prise en charge sur les plateformes IBM SDK.
- cutoff=<valeur>
- De nombreuses entrées d'échantillon sont produites pour un petit pourcentage de temps d'exécution. Par défaut, HPROF inclut tous les chemins d'exécution qui représentent au moins 0,0001 % du temps UC. Vous pouvez augmenter ou diminuer ce point limite en utilisant cette option. Par exemple, pour éliminer toutes les entrées qui représentent moins de 0,25 % du temps total d'exécution, spécifiez cutoff=0.0025.
- verbose=y|n
- Cette option génère un message lors de la génération de vidages. La valeur par défaut est y.
- lineno=y|n
- Chaque cadre contient normalement le numéro de la ligne exécutée, mais vous pouvez utiliser cette option pour supprimer les numéros de ligne de la sortie. Si cette option est activée, chaque cadre contient le texte
Unknown line
au lieu du numéro de ligne.TRACE 1056: java/util/Locale.toUpperCase(Locale.java:Unknown line) java/util/Locale.<init>(Locale.java:Unknown line) java/util/Locale.<clinit>(Locale.java:Unknown line) sun/io/CharacterEncoding.aliasName(CharacterEncoding.java:Unknown line)