Zum Inhalt springen

Bytehound - Memory Profiler für Linux Cheatsheet

Bytehound - Memory Profiler für Linux Cheatsheet

Bytehound ist ein Memory Profiler für Linux, der jede Allocation und Deallocation in einem Programm verfolgt und die Ergebnisse in einer ungewöhnlich guten Web-UI präsentiert. Über das Finden von Lecks hinaus zeigt es Allocation-Churn über die Zeit, gruppiert Allocations nach Call-Stack und lässt dich interaktiv filtern — “zeige mir Allocations größer als 1MB, die nie freigegeben wurden, aus diesem Modul.” Es ist ein Rust-basiertes Tool, das mit jedem nativen Programm funktioniert (C, C++, Rust) via LD_PRELOAD.

Installation

MethodeWie
ReleaseDownload bytehound + libbytehound.so von GitHub Releases
Aus Quellecargo build --release im Repo
AnforderungenLinux x86-64; Programm mit Symbolen (-g)
Überprüfung./bytehound --version

Profiling eines Programms

# Preload den Profiler und starte dein Programm
LD_PRELOAD=./libbytehound.so ./my-program

# Dies erzeugt memory-profiling_*.dat
VariableZweck
LD_PRELOAD=./libbytehound.soInjiziere die Allocator-Hooks
MEMORY_PROFILER_OUTPUTOutput-Dateipfad
MEMORY_PROFILER_LOG=warnLog-Level
MEMORY_PROFILER_CULL_TEMPORARY_ALLOCATIONSReduziere Noise aus kurzlebigen Allocations
MEMORY_PROFILER_DISABLE_BY_DEFAULTStarte pausiert, aktiviere programmgesteuert

Ergebnisse anschauen

# Starten Sie die Web-UI auf den erfassten Daten
./bytehound server memory-profiling_*.dat
# → öffne http://localhost:8080
AnsichtZeigt
GraphsSpeichernutzung über die Zeit (Live, Lecks, Allocated)
AllocationsJede Allocation mit Stack, Größe, Lebensdauer
Flame-GraphAllocation-Volumen dem Call-Stack zugeordnet
GelecktNie freigegebene Allocations
FilteringInteraktiver Query-Builder

Die Filter-Sprache

Bytehounds Stärke ist das Aufteilen der Daten:

FilterFindet
Nur GelecktAllocations, die beim Beenden noch aktiv sind
Größenbereichz.B. > 1 MiB
LebensdauerKurzlebig (Churn) vs Langlebig
Backtrace enthältAllocations aus einer spezifischen Funktion/Modul
ZeitbereichAllocations während eines Fensters
# Konzeptionell: Geleckte Allocations über 1MB aus dem Parser-Modul
leaked AND size > 1048576 AND backtrace contains "parser::"

Was zu suchen ist

SymptomUntersuche
RSS wächst unbegrenzt”Geleckt”-Ansicht — Allocations nie freigegeben
Hohe CPU im AllocatorTemporäre Allocation-Churn
Speicherspitze im MomentZeit-Bereichs-Filter um die Spitze
Eine Funktion dominiertAllocation Flame-Graph
FragmentierungViele kleine langlebige Allocations

Skriptung der Analyse

Bytehound stellt eine API und CLI für Automatisierung bereit:

BefehlZweck
bytehound server DATAInteraktive UI
bytehound export-heaptrack DATAKonvertiere für heaptrack-Tools
REST APIQuery Allocations programmgesteuert
ScriptingBenutzerdefinierte Analysen über dem Datensatz

Overhead reduzieren

SettingEffekt
Temporäre Allocations cullenViel kleinere Ausgabe, weniger Noise
Standardmäßig deaktiviert + im Code aktivierenProfiliere nur die interessante Phase
Kürzere LäufeDatendateien wachsen schnell

Bytehound vs andere Memory Profiler

AspektBytehoundheaptrackValgrind massifjemalloc prof
OverheadNiedrigNiedrigSehr hochSehr niedrig
UIReiche Web-UIQt GUIText/VisualizerText + Tools
FilteringAusgezeichnetGutLimitiertLimitiert
SetupLD_PRELOADheaptrack ./progvalgrind --tool=massifAllocator-Config
Bestes fürInteraktive ExplorationSchnelle Heap-ProfilingTiefe KorrektheitProduction Sampling

Vergleiche mit heaptrack für einen ähnlichen Niedrig-Overhead-Ansatz mit Qt-UI; beide schlagen Valgrind für realistische Workloads.

Ressourcen