Exercice 1.2 : Capture des vidages de tas
Avant de commencer, vous devez terminer l'Exercice 1.1 : Importation des ressources requises.
Scénario
Votre organisation possède un système de files d'attente à trois niveaux qui fait partie d'une application proxy Web. Chaque niveau du système de files d'attente possède sa propre file d'attente. L'équipe de test a détecté que l'application avait une fuite de mémoire et elle pense que cette fuite se trouve au niveau du système de files d'attente. En tant que développeur de l'une des files d'attente, vous êtes chargé de déterminer le niveau responsable de cette fuite.
Généralités
Pour effectuer l'analyse de la fuite de mémoire, vous devez enregistrer deux vidages de tas Java.
Le tas est un bloc de mémoire utilisé par la machine virtuelle Java (JVM), lors de son exécution, pour stocker les objets Java. La mémoire de tas Java est gérée par un programme de collecte corbeille qui désaffecte automatiquement de la mémoire pour les objets Java auxquels il ne reste aucune référence associée.
Un vidage de tas est une image du contenu du tas à un instant précis.
Vous avez besoin de deux vidages de tas pour constater les différences d'utilisation de la mémoire entre deux points d'exécution de votre application. Un algorithme intégré compare les tas et identifie les objets conservés à tort dans la mémoire. Cet algorithme analyse les indicateurs suivants pour détecter les fuites potentielles : objets conservés dans la mémoire pendant toute la période entre les deux vidages de tas, augmentation du nombre d'objets d'une classe donnée dans le second tas et nombre de références à un objet.
Préparation de la capture des vidages de tas
Pour capturer les vidages de tas, vous devez ouvrir la perspective Profilage et Journalisation :
- Dans la barre de menus Software Development Platform, sélectionnez Fenêtre > Ouvrir la perspective > Autre... La boîte de dialogue "Sélectionnez la perspective" s'ouvre.
- Dans la partie inférieure gauche de la boîte de dialogue, cliquez sur Show all. La case à cocher est alors sélectionnée.
- Dans la liste de perspectives, sélectionnez Profilage et Journalisation, puis cliquez sur OK.
- Si la boîte de dialogue "Confirm Enablement" s'ouvre, cliquez sur Always enable capabilities and don't ask me again, puis sur OK.
- La vue de Software Development Platform passe à la perspective Profilage et Journalisation.
Capture des vidages de tas
Au cours de ce tutoriel, vous allez enregistrer les vidages de tas manuellement. (Il est également possible de définir des intervalles de temps pour enregistrer les vidages de tas automatiquement ou d'importer les vidages de tas existants.)
Pour capturer les vidages de tas :
- Lancez l'application :
- Dans la barre de menus, sélectionnez Exécuter > Profil... La boîte de dialogue Profil s'ouvre.
- Dans la liste des configurations, cliquez deux fois sur Application Java. Une entrée Nouvelle_configuration apparaît dans la liste.
- Dans la zone Nom, saisissez ThreeTierQueue_MemLkAnalysis.
- Dans l'onglet Principal à côté de la zone Projet, cliquez sur Parcourir. La boîte de dialogue "Project Selection" s'ouvre.
- Sélectionnez ThreeTierQueue, puis cliquez sur OK.
- A côté de la zone "Main class", cliquez sur Search.
- Dans la boîte de dialogue Choose Main Type, sélectionnez TestThreeTierQueue, puis cliquez sur OK.
- Dans la boîte de dialogue Profiler, cliquez sur l'onglet Profilage.
- Dans l'onglet secondaire Généralités, cochez la case correspondant au jeu de profilage "Analyse de fuite de mémoire - Vidages de tas manuels". (Un jeu de profilage définit le type de données de profilage à collecter pour l'exécution.)
- Cliquez sur Profil. L'application s'exécute et l'affichage change de la façon suivante :
- Une ressource de profilage utilisée dans le processus apparaît dans le Moniteur du profilage.
- La vue Candidats de fuite s'ouvre et affiche un message sur l'état courant avec les instructions à suivre.
Remarque : si vous recevez un message de sécurité indiquant que le Contrôleur d'agent n'est pas disponible, lisez le paragraphe En cas d'échec de la collecte de données.
- Capturez les vidages de tas :
- Dans la barre de menus, sélectionnez Fenêtre > Afficher la vue > Console pour ouvrir la vue Console et suivre l'évolution de l'exécution de l'application.
- Laissez préchauffer l'application pendant 30 secondes environ, afin de vous assurer que toutes les classes que vous souhaitez profiler sont chargées et initialisées.
- Suivez les instructions de la vue Candidats de fuite : cliquez sur le bouton de la barre d'outils Capturer vidage de tas
pour capturer votre vidage de tas de référence, point de départ de la comparaison des tas. D'autres ressources de profilage apparaissent dans la vue Moniteur de profilage, l'une pour la détection automatique de fuites et l'autre pour le vidage de tas que vous venez de capturer.
- Laissez tourner l'application pendant une minute de plus puis, toujours d'après les instructions de la vue Candidats de fuite, capturez un deuxième vidage de tas de la même façon.
Une ressource de profilage correspondant au deuxième vidage de tas apparaît dans le Moniteur de profilage.
- Arrêtez le processus en cliquant sur le bouton correspondant
dans la vue Console.
En cas d'échec de la collecte de données
Pour que vous puissiez collecter des données de profilage, le Contrôleur d'agent doit fonctionner. Si vous recevez un message indiquant que le Contrôleur d'agent n'est pas disponible, vérifiez que celui-ci a bien été installé, démarrez-le manuellement et recommencez l'opération de collecte. Pour plus d'informations, consultez le guide d'installation. Vous pouvez y accéder à l'aide du tableau de bord et il est également disponible sur le CD du produit dans disk1/install.html.
Maintenant que vous avez collecté les données nécessaires, vous pouvez passer à l'Exercice 1.3 : Analyse des candidats de fuite.