Cette section présente les caractéristiques et les fonctionnalités du profileur d'Identity Manager : Les informations sont organisées comme suit :
Vous pouvez utiliser le profileur pour :
Créer des « instantanés » des données de profilage.
Un instantané est le résultat cumulé du profilage depuis la dernière réinitialisation de l'ensemble des résultats de profilage recueillis.
Afficher les résultats d'un instantané dans quatre affichages de données différents :
L'affichage Arborescence des appels fournit un tableau arborescent indiquant les temps des appels et leur nombre à travers le système.
L'affichage Points actifs fournit une liste simplifiée de nœuds qui indique les temps regroupés indifféremment du parent.
L'affichage Traces inverses fournit une pile d'appels inversée indiquant toutes les chaînes d'appels depuis lesquelles le nœud en question (le nœud racine) a été appelé.
L'affichage Callees (Programmes appelés) fournit une arborescence d'appels regroupée du nœud racine, indifféremment de sa chaîne parent.
Spécifiez les types d'informations à inclure dans l'instantané :
vous pouvez inclure n'importe quel élément de formulaire, flux de travaux et XPRESS ou encore restreindre le contenu à un ensemble d'éléments spécifiques.
Vous pouvez sélectionner des méthodes Java et des constructeurs spécifiques qui seront inclus ou exclus de l'instrumentation. L'instrumentation des classes d'Identity Manager et des classes personnalisées est prise en charge.
Gérez votre instantané de projet comme suit.
Enregistrez l'instantané dans le répertoire nbproject/private/idm-profiler de votre projet ou dans un emplacement arbitraire extérieur à votre projet.
Vous pouvez afficher la liste de tous les instantanés enregistrés dans la section Saved Snapshots (Instantanés enregistrés) de l'affichage du profileur IDM.
Ouvrez les instantanés depuis votre projet ou chargez-les depuis un emplacement arbitraire extérieur à votre projet.
Supprimez les instantanés.
Recherchez des nœuds spécifiques, par nom.
Cette section décrit la façon dont le profileur recherche et gère la source pour les objets suivants d'Identity Manager :
Dans l'affichage Call Tree ou Hotspots, vous pouvez double-cliquer sur tout nœud correspondant à une méthode Java, un flux de travaux, un formulaire, une règle ou XPRESS pour afficher la source de ce nœud.
Lorsque vous prenez un instantané avec le profileur, le serveur évalue l'ensemble des données de profilage et détecte les sources dont dépendent les données. Le serveur extrait ensuite toutes ces sources du référentiel et les inclut dans l'instantané. Par conséquent, vous pouvez être sûr que les objets d'Identity Manager affichés dans l'instantané reflètent avec précision le point auquel l'instantané a été capturé.
Ce processus augmente la taille de l'instantané mais la taille de la source n'est en réalité qu'une fraction relativement petite de la taille totale. Résultat, vous pouvez envoyer un instantané au support technique Sun sans devoir envoyer vos fichiers sources séparément.
Lorsque vous prenez un instantané d'une source Java, le client télécharge l'instantané puis l'examine pour capturer toutes les sources Java référencées depuis le projet. Lorsque vous enregistrez l'instantané, le client compresse les sources et les joint à la fin de l'instantané.
Ensuite, lorsque vous affichez l'instantané et allez à la source Java, le client commence par contrôler le contenu de l'instantané. Si le client n'y trouve pas de contenu, il contrôle le contenu du projet. Ce processus vous permet d'envoyer un instantané contenant des données de profilage provenant à la fois de votre code Java personnalisé et du code d'Identity Manager.
Dans un instantané de source Java, ne partez pas du principe que la source est actualisée sur le serveur ou toujours disponible.
Les sections suivantes contiennent des informations dont il convient de tenir compte lors de l'évaluation des résultats fournis par le profileur :
Pour calculer les statistiques de self time d'un nœud racine, le profileur soustrait les temps de tous les nœuds enfants du temps total de ce nœud racine.
Par conséquent, le temps d'un nœud enfant non instrumenté se reflète dans le self time du nœud racine. Si le self time d'un nœud racine est important, il convient d'enquêter pour en connaître la raison. Les méthodes instrumentées peuvent ne pas être adaptées, ce qui peut vous amener à ne pas chercher au bon endroit.
Par exemple, partez de l'hypothèse qu'une méthode A appelle une méthode B.
La méthode A a un temps total de 10 secondes (le temps total inclut l'appel à B) et l'appel à B prend un temps total de 10 secondes.
Si à la fois A et B sont instrumentées, la pile d'appels reflète ces informations. Vous verrez que A aura un self time total de 0 secondes et B un self time de 10 secondes (10 secondes ont réellement été utilisées dans B). Si toutefois B n'est pas instrumenté, vous ne verrez que l'appel à A prend 10 secondes et que le self time de A est de 10 secondes. Vous assumerez donc que le problème est directement lié à A et non pas à B.
En particulier, vous pourrez remarquer de longs self times sur les JSP pendant leur compilation initiale. Si vous réinitialisez les résultats recueillis puis réaffichez la page, la valeur de self time sera bien inférieure.
Compte tenu de limites inhérentes à la stratégie d'instrumentation de Java, les appels initiaux à this() ou super() apparaîtront comme un sibling à l'appel du constructeur plutôt que comme un enfant. Observez l'exemple suivant :
class A { public A() { this(0); } public A(int i) { } } and: class B { public static void test() { new A(); } } The call tree will look like this: B.test() -A.<init>(int) -A.<init>() Rather than this: B.test() -A.<init>() -A.<init>(int) |
Ne vous laissez pas duper par l'apparente grande quantité de temps passée dans un nombre de threads de démons d'Identity Manager tels que ReconTask.WorkerThread.run() ou TaskThread.WorkerThread.run(). La plupart de ce temps s'écoule en état de sommeil dans l'attente d'événements. Vous devez enquêter sur ces traces pour connaître le temps réellement consacré au traitement d'un événement.