Ir al contenido

samply - Muestreador de Perfiles con Interfaz Firefox Profiler

samply - Muestreador de Perfiles con Interfaz Firefox Profiler

samply es un muestreador de perfiles de línea de comandos multiplataforma para macOS, Linux y Windows. Muestrea trazas de pila de un comando o proceso en ejecución (por defecto ~1000 Hz) y luego sirve los resultados a la interfaz web Firefox Profiler — un frente final maduro e interactivo con gráficos de llama, gráficos de pila, un árbol de llamadas, y líneas de tiempo por hilo. Perfila código nativo (C/C++/Rust/Go) y otros lenguajes que emiten información de pila estándar, sin cambios de código requeridos.

Instalación

MétodoComando
Cargocargo install --locked samply
Binariodescargar desde la página GitHub Releases
Acceso de eventos perf en Linuxpuede ser necesario sysctl kernel.perf_event_paranoid=1 (o menor)
Verificarsamply --version

Uso Básico

ComandoDescripción
samply record ./my-program argsPerfilar un comando, luego abrir la interfaz
samply record -- cargo run --releasePerfilar después de -- (pasar banderas a través)
samply record --pid 1234Perfilar un proceso ya en ejecución
samply load profile.json.gzReabrir un perfil guardado en la interfaz
samply --helpLista completa de opciones

Opciones de Grabación

OpciónDescripción
-r, --rate NFrecuencia de muestreo en Hz (por defecto ~1000)
-o, --output FILEGuardar el perfil en un archivo
--save-onlyGrabar sin lanzar la interfaz del navegador
-p, --pid PIDAdjuntar a un proceso en ejecución
-d, --duration SECSPerfilar durante una duración fija
--reuse-threadsAjuste de manejo de hilos para algunas cargas de trabajo
--Todo después es el comando + sus argumentos

La Interfaz Firefox Profiler

Después de grabar, samply abre una vista local de Firefox Profiler. Paneles clave:

PanelMuestra
Gráfico de llamaPilas agregadas (dónde se gasta el tiempo)
Gráfico de pilaTiempo en el eje x, pilas apiladas verticalmente
Árbol de llamadasJerarquía de arriba hacia abajo / abajo hacia arriba con tiempo propio/total
Gráfico de marcadorEventos a lo largo del tiempo (si están presentes)
Línea de tiempoActividad por hilo; seleccionar un rango para enfocarse
Acción de interfazUso
Seleccionar un rango de tiempoEnfocar análisis en parte de la ejecución
Invertir pila de llamadasEncontrar funciones hoja caliente (tiempo propio)
BúsquedaFiltrar el árbol de llamadas por nombre de función
Compartir/exportarGuardar o subir el perfil

Consejos de Flujo de Trabajo

ObjetivoEnfoque
Encontrar rutas CPU calientesGrabar, abrir gráfico de llama, buscar marcos anchos
Encontrar una fase lenta específicaSeleccionar ese rango de tiempo en la línea de tiempo
Comparar compilacionesGuardar perfiles y cargar lado a lado
Reducir ruidoPerfilar compilaciones de liberación con información de depuración (debug = true)

Flujos de Trabajo Comunes

# Perfilar una compilación de liberación Rust (mantener símbolos con información de depuración)
samply record -- cargo run --release

# Perfilar un servidor en ejecución durante 20 segundos
samply record --pid $(pgrep -n myserver) -d 20

# Grabar sin interfaz en CI, inspeccionar el artefacto más tarde
samply record --save-only -o prof.json.gz ./bench
samply load prof.json.gz

samply vs Otros Perfiladores

Aspectosamplyperf + FlameGraphhotspot
PlataformasmacOS/Linux/WindowsLinuxLinux
InterfazFirefox Profiler (rico)SVG estáticoGUI Qt
ConfiguraciónBinario únicoMúltiples herramientasInstalación GUI
Mejor paraMultiplataforma, interactivoPerfilado Linux programadoUsuarios de GUI Qt/perf

Recursos