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
| Metodo | Come |
|---|
| Rilascio | Scarica bytehound + libbytehound.so da GitHub Releases |
| Dal sorgente | cargo build --release nel repo |
| Requisiti | Linux 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
| Variabile | Scopo |
|---|
LD_PRELOAD=./libbytehound.so | Inietta i hook dell”allocator |
MEMORY_PROFILER_OUTPUT | Percorso del file di output |
MEMORY_PROFILER_LOG=warn | Livello di log |
MEMORY_PROFILER_CULL_TEMPORARY_ALLOCATIONS | Riduci rumore da allocazioni brevi |
MEMORY_PROFILER_DISABLE_BY_DEFAULT | Avvia in pausa, abilita programmaticamente |
Visualizzazione dei Risultati
# Avvia l''UI web sui dati catturati
./bytehound server memory-profiling_*.dat
# → apri http://localhost:8080
| View | Mostra |
|---|
| Grafici | Utilizzo di memoria nel tempo (live, leaked, allocated) |
| Allocazioni | Ogni allocazione con stack, dimensione, lifetime |
| Flame graph | Volume di allocazione attribuito agli stack di chiamate |
| Leaked | Allocazioni mai liberate |
| Filtrazione | Builder di query interattivo |
Il Linguaggio di Filtrazione
La forza di Bytehound è suddividere i dati:
| Filtro | Trova |
|---|
| Solo leaked | Allocazioni vive all”uscita |
| Intervallo di dimensione | es. > 1 MiB |
| Lifetime | Breve (churn) vs long-lived |
| Backtrace contiene | Allocazioni da una funzione/modulo specifico |
| Intervallo di tempo | Allocazioni durante una finestra |
# Concettuale: allocazioni leaked oltre 1MB dal modulo parser
leaked AND size > 1048576 AND backtrace contains "parser::"
Cosa Cercare
| Sintomo | Investiga |
|---|
| RSS cresce senza limite | View “Leaked” — allocazioni mai liberate |
| CPU alta nell”allocator | Churn di allocazione temporanea |
| Spike di memoria in un momento | Filtro di intervallo di tempo intorno allo spike |
| Una funzione domina | Flame graph di allocazione |
| Frammentazione | Molte allocazioni piccole long-lived |
Scripting dell”Analisi
Bytehound espone un”API e CLI per l”automazione:
| Comando | Scopo |
|---|
bytehound server DATA | UI interattiva |
bytehound export-heaptrack DATA | Converti per heaptrack tooling |
| REST API | Interroga allocazioni programmaticamente |
| Scripting | Analisi personalizzate sul dataset |
Riduzione dell”Overhead
| Setting | Effetto |
|---|
| Cull allocazioni temporanee | Output molto più piccolo, meno rumore |
| Disabilita per default + abilita in codice | Profila solo la fase interessante |
| Esecuzioni più brevi | I file di dati crescono velocemente |
Bytehound vs Altri Memory Profiler
| Aspetto | Bytehound | heaptrack | Valgrind massif | jemalloc prof |
|---|
| Overhead | Basso | Basso | Molto alto | Molto basso |
| UI | Rich UI web | Qt GUI | Text/visualizer | Text + tooling |
| Filtrazione | Eccellente | Buono | Limitato | Limitato |
| Setup | LD_PRELOAD | heaptrack ./prog | valgrind --tool=massif | Config allocator |
| Migliore per | Esplorazione interattiva | Profiling heap veloce | Correttezza profonda | Sampling 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