Pular para o conteúdo

Bytehound - Cheatsheet de Perfilador de Memória para Linux

Bytehound - Cheatsheet de Perfilador de Memória para Linux

Bytehound é um perfilador de memória para Linux que rastreia cada alocação e desalocação em um programa e apresenta os resultados em uma UI web incomumente bom. Além de encontrar vazamentos, mostra churn de alocação ao longo do tempo, agrupa alocações por call stack, e permite que você filtre interativamente — “mostre-me alocações maiores que 1MB que nunca foram liberadas, desse módulo.” É uma ferramenta baseada em Rust que funciona com qualquer programa nativo (C, C++, Rust) via LD_PRELOAD.

Instalação

MétodoComo
LançamentoDownload bytehound + libbytehound.so do GitHub Releases
Do fontecargo build --release no repo
RequisitosLinux x86-64; programa com símbolos (-g)
Verificar./bytehound --version

Perfilando um Programa

# Preload o perfilador e execute seu programa
LD_PRELOAD=./libbytehound.so ./my-program

# Isso produz memory-profiling_*.dat
VariávelPropósito
LD_PRELOAD=./libbytehound.soInjeta os hooks do allocator
MEMORY_PROFILER_OUTPUTCaminho do arquivo de saída
MEMORY_PROFILER_LOG=warnNível de log
MEMORY_PROFILER_CULL_TEMPORARY_ALLOCATIONSReduz ruído de alocações de curta vida
MEMORY_PROFILER_DISABLE_BY_DEFAULTComece pausado, habilite programaticamente

Visualizando Resultados

# Inicia a UI web nos dados capturados
./bytehound server memory-profiling_*.dat
# → abra http://localhost:8080
ViewMostra
GráficosUso de memória ao longo do tempo (vivo, vazado, alocado)
AlocaçõesCada alocação com stack, tamanho, lifetime
Flame graphVolume de alocação atribuído a call stacks
VazadoAlocações nunca liberadas
FiltragemConstrutor de consulta interativa

A Linguagem de Filtragem

A força de Bytehound é fatiar os dados:

FiltroEncontra
Apenas vazadoAlocações vivas na saída
Intervalo de tamanhoex. > 1 MiB
LifetimeCurta (churn) vs longa
Backtrace contémAlocações de uma função/módulo específico
Intervalo de tempoAlocações durante uma janela
# Conceitual: alocações vazadas acima de 1MB do módulo parser
leaked AND size > 1048576 AND backtrace contains "parser::"

O que Procurar

SintomaInvestigue
RSS cresce sem limitesView “Vazado” — alocações nunca liberadas
CPU alto no allocatorChurn de alocação temporária
Pico de memória em um momentoFiltro de intervalo de tempo em torno do pico
Uma função dominaFlame graph de alocação
FragmentaçãoMuitas alocações pequenas de longa vida

Scriptando a Análise

Bytehound expõe uma API e CLI para automação:

ComandoPropósito
bytehound server DATAUI interativa
bytehound export-heaptrack DATAConverte para ferramentas heaptrack
REST APIConsulta alocações programaticamente
ScriptingAnálises customizadas sobre o dataset

Reduzindo Sobrecarga

SettingEfeito
Cull alocações temporáriasSaída muito menor, menos ruído
Desabilita por padrão + habilita em códigoPerfil apenas a fase interessante
Execuções mais curtasArquivos de dados crescem rápido

Bytehound vs Outros Perfiladores de Memória

AspectoBytehoundheaptrackValgrind massifjemalloc prof
SobrecargaBaixaBaixaMuito altaMuito baixa
UIUI web ricoQt GUIText/visualizerText + tooling
FiltragemExcelenteBomLimitadoLimitado
SetupLD_PRELOADheaptrack ./progvalgrind --tool=massifConfiguração de allocator
Melhor paraExploração interativaPerfilamento rápido de heapCorreção profundaAmostragem de produção

Compare com heaptrack para uma abordagem semelhante de baixa sobrecarga com Qt UI; ambos batem Valgrind em workloads realistas.

Recursos