Pular para o conteúdo

samply - Sampling Profiler com Firefox Profiler UI

samply - Sampling Profiler com Firefox Profiler UI

samply é um sampling profiler de linha de comando multiplataforma para macOS, Linux e Windows. Ele amostra stack traces de um comando ou um processo em execução (padrão ~1000 Hz) e então serve os resultados à web UI do Firefox Profiler — um front end maduro e interativo com gráficos de chama, gráficos de pilha, árvore de chamada e timelines por thread. Ele perfila código nativo (C/C++/Rust/Go) e outras linguagens que emitem informações de pilha padrão, sem mudanças de código necessárias.

Instalação

MétodoComando
Cargocargo install --locked samply
Bináriofaça download da página de Releases do GitHub
Acesso de evento perf do Linuxpode precisar sysctl kernel.perf_event_paranoid=1 (ou inferior)
Verificarsamply --version

Uso Básico

ComandoDescrição
samply record ./my-program argsPerfil de um comando, depois abra a UI
samply record -- cargo run --releasePerfil após -- (passe bandeiras através)
samply record --pid 1234Perfil de um processo já em execução
samply load profile.json.gzRe-abra um perfil salvo na UI
samply --helpLista de opção completa

Opções de Gravação

OpçãoDescrição
-r, --rate NTaxa de amostragem em Hz (padrão ~1000)
-o, --output FILESalve o perfil em um arquivo
--save-onlyGrave sem iniciar a UI do navegador
-p, --pid PIDAnexe a um processo em execução
-d, --duration SECSPerfil por uma duração fixa
--reuse-threadsAjuste de manipulação de thread para algumas workloads
--Tudo depois é o comando + seus args

A UI do Firefox Profiler

Após gravação, samply abre uma visualização local do Firefox Profiler. Painéis principais:

PainelMostra
Gráfico de chamaPilhas agregadas (onde o tempo é gasto)
Gráfico de pilhaTempo no eixo x, pilhas empilhadas verticalmente
Árvore de chamadaHierarquia top-down / bottom-up com self/total time
Gráfico de marcadorEventos com o tempo (se presente)
TimelineAtividade por thread; selecione um intervalo para focar
Ação de UIUso
Selecione um intervalo de tempoAnalise focus em parte da execução
Inverta pilha de chamadaEncontre funções de folha quente (self time)
ProcureFiltre a árvore de chamada por nome de função
Compartilhe/exporteSalve ou carregue o perfil

Dicas de Workflow

ObjetivoAbordagem
Encontre caminhos quentes de CPUGrave, abra gráfico de chama, procure por frames amplos
Encontre uma fase lenta específicaSelecione esse intervalo de tempo na timeline
Compare buildsSalve perfis e carregue lado a lado
Reduza ruídoPerfil de compilações liberadas com info de debug (debug = true)

Workflows Comuns

# Perfil de uma compilação Rust liberada (mantenha símbolos com info de debug)
samply record -- cargo run --release

# Perfil de um servidor em execução por 20 segundos
samply record --pid $(pgrep -n myserver) -d 20

# Grave headless em CI, inspecione o artefato depois
samply record --save-only -o prof.json.gz ./bench
samply load prof.json.gz

samply vs Outros Profilers

Aspectosamplyperf + FlameGraphhotspot
PlataformasmacOS/Linux/WindowsLinuxLinux
UIFirefox Profiler (rica)Static SVGQt GUI
SetupBinário únicoMúltiplas ferramentasInstalação GUI
Melhor paraCross-platform, interativoProfiling Linux scriptadoUsuários GUI do Qt/perf

Recursos