Aller au contenu

Bytehound - Profileur de Mémoire pour Linux

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éthodeComment
VersionTélécharger bytehound + libbytehound.so depuis GitHub Releases
De sourcecargo build --release dans le dépôt
ExigencesLinux 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
VariableObjectif
LD_PRELOAD=./libbytehound.soInjecter les hooks d’allocateur
MEMORY_PROFILER_OUTPUTChemin du fichier de sortie
MEMORY_PROFILER_LOG=warnNiveau de journalisation
MEMORY_PROFILER_CULL_TEMPORARY_ALLOCATIONSRéduire le bruit des allocations de courte durée
MEMORY_PROFILER_DISABLE_BY_DEFAULTCommencer 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
VueAffiche
GraphiquesUtilisation mémoire au fil du temps (en direct, fuie, alloué)
AllocationsChaque allocation avec pile, taille, durée de vie
Graphique de flammeVolume d’allocation attribué aux piles d’appels
FuiteAllocations jamais libérées
FiltrageGénérateur de requête interactif

Le Langage de Filtrage

La force de Bytehound est le découpage des données :

FiltreTrouve
Uniquement fuiteAllocations vivantes à la sortie
Plage de taillep. ex. > 1 MiB
Durée de vieCourte durée (churn) vs longue durée
Backtrace contientAllocations d’une fonction/module spécifique
Plage de tempsAllocations 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ômeEnquêter
RSS croît sans limiteVue « Fuite » — allocations jamais libérées
CPU élevé dans l’allocateurChurn d’allocation temporaire
Pic de mémoire à un momentFiltre de plage de temps autour du pic
Une fonction domineGraphique de flamme d’allocation
FragmentationNombreuses petites allocations longue durée

Scripting de l’Analyse

Bytehound expose une API et une CLI pour l’automatisation :

CommandeObjectif
bytehound server DATAInterface utilisateur interactive
bytehound export-heaptrack DATAConvertir pour les outils heaptrack
API RESTInterroger les allocations programmatiquement
ScriptingAnalyses personnalisées sur le dataset

Réduire la Surcharge

ParamètreEffet
Supprimer les allocations temporairesSortie beaucoup plus petite, moins de bruit
Désactiver par défaut + activer dans le codeProfiler uniquement la phase intéressante
Exécutions plus courtesLes fichiers de données croissent rapidement

Bytehound vs Autres Profileurs de Mémoire

AspectBytehoundheaptrackValgrind massifjemalloc prof
SurchargeBasBasTrès élevéTrès bas
InterfaceInterface web richeGUI QtTexte/visualiseurTexte + outils
FiltrageExcellentBonLimitéLimité
ConfigurationLD_PRELOADheaptrack ./progvalgrind --tool=massifConfig allocateur
Meilleur pourExploration interactiveProfilage heap rapideCorrectness 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