Salta ai contenuti

Bytehound - Memory Profiler per Linux

Bytehound - Memory Profiler per Linux Cheatsheet

Bytehound è un profiler di memoria per Linux che traccia ogni allocazione e deallocazione in un programma e presenta i risultati in un UI web insolitamente buono. Oltre a trovare leak, mostra churn di allocazione nel tempo, raggruppa allocazioni per stack di chiamate, e ti consente di filtrare in modo interattivo — “mostrami allocazioni più grandi di 1MB che non sono mai state liberate, da questo modulo.” È un tool basato su Rust che funziona con qualsiasi programma nativo (C, C++, Rust) via LD_PRELOAD.

Installazione

MetodoCome
RilascioScarica bytehound + libbytehound.so da GitHub Releases
Dal sorgentecargo build --release nel repo
RequisitiLinux x86-64; programma con simboli (-g)
Verifica./bytehound --version

Profiling di Un Programma

# Preload il profiler ed esegui il tuo programma
LD_PRELOAD=./libbytehound.so ./my-program

# Questo produce memory-profiling_*.dat
VariabileScopo
LD_PRELOAD=./libbytehound.soInietta i hook dell”allocator
MEMORY_PROFILER_OUTPUTPercorso del file di output
MEMORY_PROFILER_LOG=warnLivello di log
MEMORY_PROFILER_CULL_TEMPORARY_ALLOCATIONSRiduci rumore da allocazioni brevi
MEMORY_PROFILER_DISABLE_BY_DEFAULTAvvia in pausa, abilita programmaticamente

Visualizzazione dei Risultati

# Avvia l''UI web sui dati catturati
./bytehound server memory-profiling_*.dat
# → apri http://localhost:8080
ViewMostra
GraficiUtilizzo di memoria nel tempo (live, leaked, allocated)
AllocazioniOgni allocazione con stack, dimensione, lifetime
Flame graphVolume di allocazione attribuito agli stack di chiamate
LeakedAllocazioni mai liberate
FiltrazioneBuilder di query interattivo

Il Linguaggio di Filtrazione

La forza di Bytehound è suddividere i dati:

FiltroTrova
Solo leakedAllocazioni vive all”uscita
Intervallo di dimensionees. > 1 MiB
LifetimeBreve (churn) vs long-lived
Backtrace contieneAllocazioni da una funzione/modulo specifico
Intervallo di tempoAllocazioni durante una finestra
# Concettuale: allocazioni leaked oltre 1MB dal modulo parser
leaked AND size > 1048576 AND backtrace contains "parser::"

Cosa Cercare

SintomoInvestiga
RSS cresce senza limiteView “Leaked” — allocazioni mai liberate
CPU alta nell”allocatorChurn di allocazione temporanea
Spike di memoria in un momentoFiltro di intervallo di tempo intorno allo spike
Una funzione dominaFlame graph di allocazione
FrammentazioneMolte allocazioni piccole long-lived

Scripting dell”Analisi

Bytehound espone un”API e CLI per l”automazione:

ComandoScopo
bytehound server DATAUI interattiva
bytehound export-heaptrack DATAConverti per heaptrack tooling
REST APIInterroga allocazioni programmaticamente
ScriptingAnalisi personalizzate sul dataset

Riduzione dell”Overhead

SettingEffetto
Cull allocazioni temporaneeOutput molto più piccolo, meno rumore
Disabilita per default + abilita in codiceProfila solo la fase interessante
Esecuzioni più breviI file di dati crescono velocemente

Bytehound vs Altri Memory Profiler

AspettoBytehoundheaptrackValgrind massifjemalloc prof
OverheadBassoBassoMolto altoMolto basso
UIRich UI webQt GUIText/visualizerText + tooling
FiltrazioneEccellenteBuonoLimitatoLimitato
SetupLD_PRELOADheaptrack ./progvalgrind --tool=massifConfig allocator
Migliore perEsplorazione interattivaProfiling heap veloceCorrettezza profondaSampling di produzione

Confronta con heaptrack per un approccio simile a basso overhead con Qt UI; entrambi battono Valgrind per i carichi di lavoro realistici.

Risorse