Tutoriel pour apprendre HeapTrack

Un outil de suivi de la consommation mémoire sous Linux

Milian Wolff

Traducteur

Guillaume Sigui

HeapTrack est un outil de suivi de la consommation mémoire sous Linux. Il est pratique pour surveiller les ressources consommées par les applications programmées en C et C++. Ce tutoriel va vous présenter les fonctionnalités de HeapTrack et vous apprendre à les utiliser.

Un espace de dialogue vous est proposé sur ce tutoriel. N'hésitez pas à partager votre avis. Commentez

- Titre : Tutoriel pour apprendre HeapTrack

- Auteur : Milian Wolff

- Traducteur : Guillaume Sigui

- Parution : 4 décembre 2017

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2017 Milian Wolff. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Aperçu des fonctionnalités de HeapTrack

- II. Utiliser HeapTrack

- II-A. Installation de HeapTrack

- II-A-1. Dépendances logicielles

- II-A-2. Compilation

- II-B. Chargement d'une application dans HeapTrack

- II-C. Analyser les données enregistrées

- II-C-1. L'outil de visualisation basique et simpliste heaptrack_print

- II-C-2. L'outil de visualisation graphique heaptrack_gui

- III. Note de la rédaction Developpez.com

I - Aperçu des fonctionnalités de HeapTrack

HeapTrack est un profileur de mémoire rapide et efficace, qui fonctionne sous Linux. Il vous permet de suivre toute allocation de mémoire pendant l'exécution d'un programme.

Il est aussi doté d'une interface graphique GUI, pour trouver plus facilement des points d'optimisation dans votre code en analysant les données de profilage enregistrées.

HeapTrack est un outil qui vous permet de :

- inspecter les pics de consommation de mémoire ;

- trouver les fuites de mémoire ;

- compter le nombre total d'allocations de mémoire, et rechercher des allocations temporaires ;

- trouver les petites allocations pour de grands besoins.

Vous pouvez utiliser HeapTrack pour surveiller la consommation de mémoire par toute application sur un système Linux.

Il a été utilisé avec beaucoup de succès sur les systèmes Linux 32 bits et 64 bits pour des plateformes x86 et ARM, pour des applications graphiques et non graphiques, sur le bureau et dans l'embarqué.

II - Utiliser HeapTrack

Avant tout, il faudrait télécharger la source au format d'archive .tar depuis les miroirs de KDE.

Pour utiliser HeapTrack dans le suivi de la consommation mémoire de vos applications C et C++, il suffit de suivre les étapes suivantes :

- installer HeapTrack ;

- charger l'application à examiner dans HeapTrack ;

- analyser les données enregistrées.

Ces points sont décrits dans les sections qui suivent.

II-A - Installation de HeapTrack

II-A-1 - Dépendances logicielles

Avant d'installer HeapTrack, il est recommandé de lire fichier README.md qui contient les prérequis spécifiques à la version.

HeapTrack est divisé en deux parties :

- le collecteur de données, c'est heaptrack lui-même ;

- l'outil d'analyse de données en mode graphique heaptrack_gui.

Dans la suite de l'article, on présentera les dépendances de paquetages pour ces deux parties, qui peuvent être installées de façon indépendante.

Pour un système intégré ou une vieille distribution Linux, vous pouvez seulement installer la partie heaptrack. Les données peuvent être analysées avec l'outil basique heaptrack_print.

Pour ce tutoriel qui porte sur la version 1.0.0, les prérequis sont :

Dépendances communes aux deux parties

Pour les deux parties, il faut préalablement installer les outils et librairies suivantes :

- cmake 2.8.9 ou version supérieure ;

- un compilateur C++11 comme g++ ou clang++ ;

- zlib ;

- libdl ;

- pthread ;

- libc.

Dépendances spécifiques à heaptrack

Le collecteur de données heaptrack et l'outil d'analyse basique et simpliste heaptrack_print dépendent des librairies suivantes :

- boost 1.41 ou version ultérieure : iostreams, program_options ;

- libunwind ;

- elfutils: libdwarf.

Pour le mode « runtime-attaching », vous aurez besoin d'installer le paquet gdb.

Dépendances spécifiques à heaptrack_gui

L'outil à interface graphique pour interpréter et analyser les données collectées par heaptrack dépend de Qt 5 et de certaines librairies KDE :

- extra-cmake-modules ;

- Qt 5.2 or higher ;: Core, Widgets ;

- KDE Frameworks 5 ;: CoreAddons, I18n, ItemModels, ThreadWeaver, ConfigWidgets, KIO.

Si n'importe laquelle de ces dépendances n'est pas installée, la compilation de heaptrack_gui va échouer.

De façon facultative, vous pouvez installer les outils suivants pour des fonctionnalités additionnelles dans l'interface graphique :

- Kdiagram sur le système d'exploitation, pour l'outil KChart dans HeapTrack (pour les visualisations de graphique).

II-A-2 - Compilation

Pour compiler heaptrack, il suffit d'exécuter les commandes suivantes. Il faut faire attention aux retours de la commande Cmake, qui retourne des informations relatives aux dépendances manquantes :

1. cd heaptrack # le répertoire des sources

2. mkdir build

3. cd build

4. cmake -DCMAKE_BUILD_TYPE=Release .. # Vérifier les messages relatifs aux dépendances manquantes !

5. make -j$(nproc)

II-B - Chargement d'une application dans HeapTrack

Pour charger une application dans HeapTrack, il suffit d'exécuter la commande heaptrack <nom de l'application> dans le shell :

heaptrack <nom de l'application et ses paramètres>

Les données retournées par heaptrack seront enregistrées dans « /tmp/heaptrack.APP.PID.gz »

Démarrage de l'application, ceci prendra un certain temps...

...

heaptrack stats:
allocations:            65
fuites d'allocations :     60
allocations temporaires :  1

Exécution de Heaptrack terminée ! Maintenant, exécutez ceci pour analyser les données :

heaptrack_gui "/tmp/heaptrack.APP.PID.gz"

Pour une application déjà en exécution, vous pouvez l'attacher à HeapTrack avec la commande : heaptrack -p <PID du processus de l'application>.

heaptrack --pid $(pidof <PID de votre application>)

Les données retournées par heaptrack seront enregistrées dans « /tmp/heaptrack.APP.PID.gz
Injection de heaptrack dans l'application via GDB, ceci prendra un certain temps...
Injection terminée

...

Exécution de Heaptrack terminée ! Maintenant, exécutez ceci pour analyser les données :

heaptrack_gui "/tmp/heaptrack.APP.PID.gz"

II-C - Analyser les données enregistrées

Le collecteur des données heaptrack génère des données qu'il n'est pas possible d'analyser pour un humain. C'est pour cela que vous avez besoin d'utiliser heaptrack_print ou heaptrack _gui pour interpréter les résultats obtenus.

II-C-1 - L'outil de visualisation basique et simpliste heaptrack_print

L'outil heaptrack_print est un outil en ligne de commande avec un minimum de dépendances. Il prend le profil de l'application généré par heaptrack, l'analyse et affiche les résultats au format ASCII, en ligne de commande.

Dans sa forme la plus simple, il peut être utilisé comme suit :

heaptrack_print heaptrack.APP.PID.gz | less

Par défaut, le résultat contient trois sections que sont :

MOST CALLS TO ALLOCATION FUNCTIONS

PEAK MEMORY CONSUMERS

MOST TEMPORARY ALLOCATIONS

Chaque section affiche les dix premiers points clés (hotspots).

Vous pouvez consulter heaptrack_print -help pour changer le format du rendu et obtenir d'autres options.

II-C-2 - L'outil de visualisation graphique heaptrack_gui

L'outil le plus recommandé pour analyser les données collectées est l'outil graphique heaptrack_gui. Il dépend de Qt5 et KF5 pour fournir une visualisation graphique. Ses fonctionnalités principales sont :

- une page récapitulative des données ;

- vues arborescentes ascendantes et descendantes des emplacements de code allouant de la mémoire, avec leurs coûts cumulés et leurs traces de pile d'exécution ;

- visualisation de graphiques en forme de flamme ;

- graphiques des coûts d'allocation sur la durée.

Quelques aperçus du rendu de heaptrack_gui :

III - Note de la rédaction Developpez.com

Ce tutoriel est une traduction de cet article de KDAB et de quelques extraits du README.md. Developpez.com remercie KDAB pour l'autorisation de traduction et de publication de ce tutoriel. Nos remerciements également à Guillaume Sigui pour la traduction et Maxy35 pour la relecture orthographique.