Bytehound - Profileur de Mémoire pour Linux
Bytehound est un profileur de mémoire pour Linux qui suit chaque allocation et déallocation dans un programme et présente les résultats dans une interface web exceptionnellement bonne. Au-delà de la recherche de fuites, il affiche le churn d’allocation au fil du temps, groupe les allocations par pile d’appels, et vous permet de filtrer interactivement — « montre-moi les allocations supérieures à 1 MB qui n’ont jamais été libérées, à partir de ce module ». C’est un outil basé sur Rust qui fonctionne avec n’importe quel programme natif (C, C++, Rust) via LD_PRELOAD.
Installation
| Méthode | Comment |
|---|
| Version | Télécharger bytehound + libbytehound.so depuis GitHub Releases |
| De source | cargo build --release dans le dépôt |
| Exigences | Linux x86-64 ; programme avec symboles (-g) |
| Vérifier | ./bytehound --version |
Profiler un Programme
# Précharger le profileur et exécuter votre programme
LD_PRELOAD=./libbytehound.so ./my-program
# Cela produit memory-profiling_*.dat
| Variable | Objectif |
|---|
LD_PRELOAD=./libbytehound.so | Injecter les hooks d’allocateur |
MEMORY_PROFILER_OUTPUT | Chemin du fichier de sortie |
MEMORY_PROFILER_LOG=warn | Niveau de journalisation |
MEMORY_PROFILER_CULL_TEMPORARY_ALLOCATIONS | Réduire le bruit des allocations de courte durée |
MEMORY_PROFILER_DISABLE_BY_DEFAULT | Commencer suspendu, activer programmatiquement |
Affichage des Résultats
# Démarrer l'interface web sur les données capturées
./bytehound server memory-profiling_*.dat
# → ouvrir http://localhost:8080
| Vue | Affiche |
|---|
| Graphiques | Utilisation mémoire au fil du temps (en direct, fuie, alloué) |
| Allocations | Chaque allocation avec pile, taille, durée de vie |
| Graphique de flamme | Volume d’allocation attribué aux piles d’appels |
| Fuite | Allocations jamais libérées |
| Filtrage | Générateur de requête interactif |
Le Langage de Filtrage
La force de Bytehound est le découpage des données :
| Filtre | Trouve |
|---|
| Uniquement fuite | Allocations vivantes à la sortie |
| Plage de taille | p. ex. > 1 MiB |
| Durée de vie | Courte durée (churn) vs longue durée |
| Backtrace contient | Allocations d’une fonction/module spécifique |
| Plage de temps | Allocations pendant une fenêtre |
# Conceptuel : allocations fuites supérieures à 1 MB du module parser
leaked AND size > 1048576 AND backtrace contains "parser::"
Ce à Quoi Faire Attention
| Symptôme | Enquêter |
|---|
| RSS croît sans limite | Vue « Fuite » — allocations jamais libérées |
| CPU élevé dans l’allocateur | Churn d’allocation temporaire |
| Pic de mémoire à un moment | Filtre de plage de temps autour du pic |
| Une fonction domine | Graphique de flamme d’allocation |
| Fragmentation | Nombreuses petites allocations longue durée |
Scripting de l’Analyse
Bytehound expose une API et une CLI pour l’automatisation :
| Commande | Objectif |
|---|
bytehound server DATA | Interface utilisateur interactive |
bytehound export-heaptrack DATA | Convertir pour les outils heaptrack |
| API REST | Interroger les allocations programmatiquement |
| Scripting | Analyses personnalisées sur le dataset |
Réduire la Surcharge
| Paramètre | Effet |
|---|
| Supprimer les allocations temporaires | Sortie beaucoup plus petite, moins de bruit |
| Désactiver par défaut + activer dans le code | Profiler uniquement la phase intéressante |
| Exécutions plus courtes | Les fichiers de données croissent rapidement |
Bytehound vs Autres Profileurs de Mémoire
| Aspect | Bytehound | heaptrack | Valgrind massif | jemalloc prof |
|---|
| Surcharge | Bas | Bas | Très élevé | Très bas |
| Interface | Interface web riche | GUI Qt | Texte/visualiseur | Texte + outils |
| Filtrage | Excellent | Bon | Limité | Limité |
| Configuration | LD_PRELOAD | heaptrack ./prog | valgrind --tool=massif | Config allocateur |
| Meilleur pour | Exploration interactive | Profilage heap rapide | Correctness approfondie | Échantillonnage de production |
Comparer avec heaptrack pour une approche similaire à surcharge basse avec GUI Qt ; les deux battent Valgrind pour les charges de travail réalistes.
Ressources