Salta ai contenuti

samply - Sampling Profiler con UI Firefox Profiler

samply - Sampling Profiler con UI Firefox Profiler

samply è un sampling profiler da linea di comando cross-platform per macOS, Linux e Windows. Campiona le tracce di stack di un comando o di un processo in esecuzione (default ~1000 Hz) e poi serve i risultati all”UI web Firefox Profiler — un front-end maturo e interattivo con grafici flame, grafici di stack, un call tree e timeline per-thread. Profila il codice nativo (C/C++/Rust/Go) e altri linguaggi che emettono informazioni di stack standard, senza modifiche al codice richieste.

Installazione

MetodoComando
Cargocargo install --locked samply
Binarioscarica dalla pagina GitHub Releases
Accesso ai perf event su Linuxpotrebbe essere necessario sysctl kernel.perf_event_paranoid=1 (o inferiore)
Verificasamply --version

Utilizzo Base

ComandoDescrizione
samply record ./my-program argsProfila un comando, poi apri l”UI
samply record -- cargo run --releaseProfila dopo -- (passa i flag attraverso)
samply record --pid 1234Profila un processo già in esecuzione
samply load profile.json.gzRiapri un profilo salvato nell”UI
samply --helpElenco completo delle opzioni

Opzioni di Registrazione

OpzioneDescrizione
-r, --rate NTasso di sampling in Hz (default ~1000)
-o, --output FILESalva il profilo in un file
--save-onlyRegistra senza avviare il browser UI
-p, --pid PIDAllega a un processo in esecuzione
-d, --duration SECSProfila per una durata fissa
--reuse-threadsRegolazione della gestione dei thread per alcuni carichi di lavoro
--Tutto dopo è il comando + i suoi argomenti

L”UI Firefox Profiler

Dopo la registrazione, samply apre una vista Firefox Profiler locale. Pannelli principali:

PannelloMostra
Grafico flameStack aggregati (dove è speso il tempo)
Stack chartTempo sull”asse x, stack impilati verticalmente
Call treeGerarchia top-down / bottom-up con tempo self/total
Marker chartEventi nel tempo (se presenti)
TimelineAttività per-thread; seleziona un intervallo per mettere a fuoco
Azione UIUsa
Seleziona un intervallo di tempoMetti a fuoco l”analisi su parte della corsa
Inverti call stackTrova funzioni foglia hot (self time)
RicercaFiltra il call tree per nome funzione
Condividi/exportSalva o carica il profilo

Suggerimenti del Flusso di Lavoro

ScopoApproccio
Trova i percorsi hot della CPURegistra, apri il grafico flame, cerca frame ampi
Trova una fase lenta specificaSeleziona quell”intervallo di tempo nella timeline
Confronta buildSalva i profili e carica side by side
Riduci il rumoreProfila release build con info di debug (debug = true)

Flussi di Lavoro Comuni

# Profila una build Rust release (mantieni simboli con info di debug)
samply record -- cargo run --release

# Profila un server in esecuzione per 20 secondi
samply record --pid $(pgrep -n myserver) -d 20

# Registra headless in CI, ispeziona l''artefatto più tardi
samply record --save-only -o prof.json.gz ./bench
samply load prof.json.gz

samply vs Altri Profiler

Aspettosamplyperf + FlameGraphhotspot
PiattaformemacOS/Linux/WindowsLinuxLinux
UIFirefox Profiler (ricco)SVG staticoGUI Qt
SetupSingolo binarioStrumenti multipliInstallazione GUI
Migliore perCross-platform, interattivoProfilazione scripted LinuxUtenti GUI Qt/perf

Risorse