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 :
2.
3.
4.
5.
cd heaptrack # le répertoire des sources
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE
=
Release .. # Vérifier les messages relatifs aux dépendances manquantes !
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.