Activation de la capture de données du tas
L’analyse du tas de processus est plus efficace lorsque des piles sont collectées pour capturer des événements HeapAlloc et HeapRealloc . Pour décoder des piles avec des symboles, vous devez activer le décodage de symboles. Vous pouvez capturer des données de tas au démarrage d’un processus ou sur un processus existant.
Pour activer la capture de données lors du démarrage d’un processus
Cet exemple montre comment démarrer le processus analysé à partir de la séquence de ligne de commande qui démarre la capture de données. L’activation de la capture de données lorsqu’un processus est démarré garantit qu’il n’y a pas de perte d’informations ou d’historique d’allocation. Effectuez les étapes suivantes pour activer la capture de données au lancement du processus :
À partir d’une invite de commandes avec élévation de privilèges, tapez la commande suivante :
xperf -on Base -BufferSize 1024 -MinBuffers 10 -MaxBuffers 16
Voici un exemple de commande :
xperf -start HeapSession -heap -PidNewProcess "C:\Program Files\Windows Sidebar\sidebar.exe" -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc
La barre latérale s’ouvre sur le bureau.
Le tableau suivant décrit ces commandes.
Commande Description -start HeapSession
Initialise une session de suivi ou une session d’enregistreur d’événements. Dans ce cas, la session est nommée « HeapSession ».
-Tas
Identifie « HeapSession » en tant que trace de tas.
-PidNewProcess
Initialise un processus. Dans ce cas, initialise la barre latérale Windows.
-BufferSize
Définit la taille de la mémoire tampon dans laquelle les données d’événement sont stockées. Une taille optimale pour une mémoire tampon est de 1 024 Ko. La valeur par défaut est 64.
-MinBuffers
Définit le nombre minimal de mémoires tampons pour le stockage des données d’événements. MinBuffers doit être égal à MaxBuffers pour garantir la cohérence entre les traces.
-MaxBuffers
Allouez MaxBuffers de manière conservatrice, car les mémoires tampons sont allouées à partir de la mémoire non paginée, qui est une ressource système finie.
-stackwalk
Initialise la fonctionnalité stackwalk pour collecter des informations d’allocation et de désallocation et associer ces informations à des threads spécifiques.
HeapAlloc+HeapRealloc
Identifie les événements de tas spécifiques à capturer et à présenter par l’installation stackwalk.
Tapez la commande suivante :
xperf -stop -stop HeapSession -d HeapTrace.etl
La
-d HeapTrace.etl
commande fusionne les traces produites dans la session dans le fichier HeapTrace.etl.
Pour activer la capture de données sur un processus existant
Cette option permet la capture de données sans arrêter et redémarrer le processus. Cela peut être avantageux lorsque le scénario en cours d’analyse ne se produit pas avant le démarrage de l’application et que l’allocation initiale du tas (qui peut générer des fichiers de trace extrêmement volumineux) n’est pas nécessaire.
Effectuez les étapes suivantes :
À partir d’une invite de commandes avec élévation de privilèges, démarrez l’enregistreur d’événements du noyau NT avec l’indicateur BASE comme suit :
xperf -on BASE
Pour activer le suivi du tas sur un processus existant, remplacez l’ID de processus réel par XXX dans la commande suivante :
xperf -start HeapSession -heap -Pid XXX -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc
Préparez les traces pour l’analyse de la même manière que pour la capture de données lors du démarrage d’un processus :
xperf -stop -stop HeapSession -d heapTrace.etl