heaptrack - Profileur de mémoire heap pour Linux
heaptrack (par KDE) est un profileur de mémoire heap pour Linux. Il trace toutes les allocations mémoire et annote chacune avec une trace de pile, donc vous pouvez trouver les fuites, les points d’allocation chauds, les allocations temporaires excessives, et l’utilisation maximale de mémoire. Il enregistre un fichier de données pendant que votre programme s’exécute, puis l’analyse soit avec heaptrack_gui (graphes en flamme riches et graphiques) soit heaptrack_print (en ligne de commande). Le surcoût est assez faible pour les charges de travail réalistes.
Installation
| Plateforme | Commande |
|---|
| Debian/Ubuntu | sudo apt install heaptrack heaptrack-gui |
| Fedora | sudo dnf install heaptrack heaptrack-gui |
| Arch Linux | sudo pacman -S heaptrack heaptrack-qt |
| À partir des sources | construire depuis le repo KDE/heaptrack (CMake) |
| Vérifier | heaptrack --version |
Enregistrement
| Commande | Description |
|---|
heaptrack ./my-program args | Profiler une commande depuis le début |
heaptrack -p PID | Attacher à un processus en cours d’exécution (basé sur GDB) |
heaptrack -o out.zst ./prog | Écrire vers un fichier de sortie spécifique |
| Output | Crée heaptrack.PROG.PID.zst dans le répertoire actuel |
À la sortie, heaptrack affiche un résumé et le chemin vers le fichier de données enregistrées.
Analyse (GUI)
heaptrack_gui heaptrack.my-program.12345.zst
| Vue GUI | Affiche |
|---|
| Summary | RSS maximale, allocations totales, octets leaked |
| Flame graph | Allocations attribuées aux piles d’appels |
| Top-down / bottom-up | Arbres d’appels par allocation |
| Caller/callee | Naviguer les relations d’allocation |
| Charts | Allocations/fuites/temporaire dans le temps |
Analyse (CLI)
# Afficher les points d'allocation les plus chauds au terminal
heaptrack_print heaptrack.my-program.12345.zst | less
| Métrique | Signification |
|---|
| peak | Mémoire heap maximale détenue à la fois |
| leaked | Mémoire allouée mais jamais libérée |
| allocations | Nombre total d’allocations (variation) |
| temporary | Allocations libérées presque immédiatement (gaspillage) |
| Option | Description |
|---|
-a, --print-peak | Trier par consommateurs de mémoire maximale |
-l, --print-leaks | Afficher les fuites |
-t, --print-temporary | Afficher les points d’allocation temporaire |
-d, --diff FILE | Diff deux enregistrements |
Comparer les exécutions (Diff)
# Voir ce qui a changé entre deux builds/exécutions
heaptrack_print -d before.zst after.zst
Ce que chaque métrique vous dit
| Symptôme | Regarder |
|---|
| RSS du processus continue de croître | leaked — allocations jamais libérées |
| Coût CPU allocator élevé | allocations / temporary — trop de variation |
| OOM sous charge | peak — réduire la mémoire simultanée maximale |
| Pointe mémoire au démarrage | graphe en flamme au moment pertinent |
Workflows courants
# Trouver une fuite dans un service
heaptrack ./myservice --run-workload
heaptrack_print -l heaptrack.myservice.*.zst | head -30
# Attribuer la mémoire maximale pendant une opération lourde (GUI est plus facile)
heaptrack ./batch-job
heaptrack_gui heaptrack.batch-job.*.zst # inspecter le graphe en flamme « peak »
# Réduire la variation d'allocation temporaire dans une boucle chaude
heaptrack_print -t heaptrack.*.zst | head
heaptrack vs autres outils de mémoire
| Aspect | heaptrack | Valgrind (massif/memcheck) | Allocators intégrés |
|---|
| Surcoût | Faible | Élevé (memcheck très élevé) | Varie |
| Détection de fuite | Oui | Oui (memcheck) | Partiel |
| Variation d’allocation | Oui (temporaire) | massif focus sur peak | Non |
| Interface | GUI riche + CLI | Texte / massif-visualizer | Aucune |
| Meilleur pour | Profilage rapide de heap sur exécutions réalistes | Vérifications de correction approfondie | Vérifications rapides |
Ressources