samply - Sampling Profiler with Firefox Profiler UI Cheatsheet
samply ist ein Cross-Plattform Command-Line Sampling Profiler für macOS, Linux und Windows. Es tastet Stack Traces von einem Befehl oder einem laufenden Prozess (Default ~1000 Hz) und dient dann die Ergebnisse zur Firefox Profiler Web UI — eine Reife, Interaktive Front End mit Flame Graphs, Stack Charts, ein Call Tree und Pro-Thread Timelines. Es profilet Native Code (C/C++/Rust/Go) und Andere Sprachen, die Standard Stack Info ausgeben, mit Keine Code Änderungen erforderlich.
Installation
| Methode | Befehl |
|---|
| Cargo | cargo install --locked samply |
| Binär | Download von der GitHub Releases Seite |
| Linux perf Event Zugriff | Könnte sysctl kernel.perf_event_paranoid=1 (oder niedriger) brauchen |
| Überprüfen | samply --version |
Grundlegende Nutzung
| Befehl | Beschreibung |
|---|
samply record ./my-program args | Profile einen Befehl, dann öffne die UI |
samply record -- cargo run --release | Profile nach -- (Pass Flaggen durch) |
samply record --pid 1234 | Profile einen bereits-laufenden Prozess |
samply load profile.json.gz | Re-öffne ein Gespeicherts Profil in der UI |
samply --help | Vollständige Optionenliste |
Recording Optionen
| Option | Beschreibung |
|---|
-r, --rate N | Sampling Rate in Hz (Default ~1000) |
-o, --output FILE | Speicher das Profil zu einer Datei |
--save-only | Aufzeichnung ohne Starten der Browser UI |
-p, --pid PID | Attach zu einem laufenden Prozess |
-d, --duration SECS | Profile für eine Feste Duration |
--reuse-threads | Thread Handling Tweak für einige Workloads |
-- | Alles nach das ist der Befehl + seine Args |
Die Firefox Profiler UI
Nach Aufzeichnung öffnet Samply eine Lokale Firefox Profiler Ansicht. Key Panels:
| Panel | Zeigt |
|---|
| Flame Graph | Aggregierte Stacks (wo Zeit ausgegeben wird) |
| Stack Chart | Zeit auf den X-Axis, Stacks vertikal stapeln |
| Call Tree | Top-Down / Bottom-Up Hierarchie mit Self/Total Zeit |
| Marker Chart | Events über Zeit (wenn vorhanden) |
| Timeline | Pro-Thread Aktivität; Wähle einen Bereich um Fokus zu setzen |
| UI Aktion | Nutzung |
|---|
| Wähle einen Zeit Bereich | Fokus Analyse auf Teil des Runs |
| Invert Call Stack | Finde Heiße Blatt Funktionen (Self Zeit) |
| Suche | Filter den Call Tree nach Funktions Namen |
| Teile/Export | Speicher oder Upload das Profil |
Workflow Tips
| Ziel | Ansatz |
|---|
| Finde CPU Heiße Paths | Aufzeichnung, öffne Flame Graph, Look für Breite Frames |
| Finde ein Spezifisches Langsames Phase | Wähle diesen Zeit Bereich in der Timeline |
| Vergleiche Builds | Speicher Profile und Lade Seite an Seite |
| Reduziere Rauschen | Profile Release Builds mit Debug Info (debug = true) |
Common Workflows
# Profile ein Rust Release Build (Halten Sie Symbols mit Debug Info)
samply record -- cargo run --release
# Profile ein laufender Server für 20 Sekunden
samply record --pid $(pgrep -n myserver) -d 20
# Aufzeichnung Headless in CI, Inspiziere den Artifact später
samply record --save-only -o prof.json.gz ./bench
samply load prof.json.gz
samply vs Andere Profilers
| Aspekt | samply | perf + FlameGraph | hotspot |
|---|
| Plattformen | macOS/Linux/Windows | Linux | Linux |
| UI | Firefox Profiler (Reichlich) | Static SVG | Qt GUI |
| Setup | Single Binary | Multiple Tools | GUI Install |
| Beste für | Cross-Plattform, Interaktiv | Scripted Linux Profiling | Qt/perf GUI Users |
Ressourcen