heaptrack - Perfilador de Memoria de Montículo para Linux
heaptrack (por KDE) es un perfilador de memoria de montículo para Linux. Rastrea todas las asignaciones de memoria y anota cada una con una traza de pila, así puedes encontrar fugas, puntos calientes de asignación, asignaciones temporales excesivas, y uso máximo de memoria. Registra un archivo de datos mientras tu programa se ejecuta, luego lo analiza con heaptrack_gui (gráficos de llama y gráficos ricos) o heaptrack_print (línea de comandos). La sobrecarga es lo suficientemente baja para cargas de trabajo realistas.
Instalación
| Plataforma | Comando |
|---|
| Debian/Ubuntu | sudo apt install heaptrack heaptrack-gui |
| Fedora | sudo dnf install heaptrack heaptrack-gui |
| Arch Linux | sudo pacman -S heaptrack heaptrack-qt |
| Desde fuente | compilar desde el repo KDE/heaptrack (CMake) |
| Verificar | heaptrack --version |
Grabación
| Comando | Descripción |
|---|
heaptrack ./my-program args | Perfilar un comando desde el inicio |
heaptrack -p PID | Adjuntar a un proceso en ejecución (basado en GDB) |
heaptrack -o out.zst ./prog | Escribir a un archivo de salida específico |
| Salida | Crea heaptrack.PROG.PID.zst en el directorio actual |
Al salir, heaptrack imprime un resumen y la ruta al archivo de datos grabado.
Análisis (GUI)
heaptrack_gui heaptrack.my-program.12345.zst
| Vista GUI | Muestra |
|---|
| Resumen | RSS pico, asignaciones totales, bytes fugados |
| Gráfico de llama | Asignaciones atribuidas a pilas de llamadas |
| Arriba hacia abajo / abajo hacia arriba | Árboles de llamadas por asignación |
| Llamante/llamado | Navegar relaciones de asignación |
| Gráficos | Asignaciones/fugas/temporal a lo largo del tiempo |
Análisis (CLI)
# Imprimir los puntos calientes de asignación superior a la terminal
heaptrack_print heaptrack.my-program.12345.zst | less
| Métrica | Significado |
|---|
| peak | Memoria de montículo máxima sostenida a la vez |
| leaked | Memoria asignada pero nunca liberada |
| allocations | Número total de asignaciones (vaciado) |
| temporary | Asignaciones liberadas casi inmediatamente (desperdicio) |
| Opción | Descripción |
|---|
-a, --print-peak | Ordenar por consumidores de memoria pico |
-l, --print-leaks | Mostrar fugas |
-t, --print-temporary | Mostrar puntos calientes de asignación temporal |
-d, --diff FILE | Diferenciar dos grabaciones |
Comparando Ejecuciones (Diff)
# Ver qué cambió entre dos compilaciones/ejecuciones
heaptrack_print -d before.zst after.zst
Lo Que Cada Métrica Te Dice
| Síntoma | Mirar |
|---|
| RSS del proceso sigue creciendo | leaked — asignaciones nunca liberadas |
| Alto costo CPU del asignador | allocations / temporary — demasiado vaciado |
| OOM bajo carga | peak — reducir memoria máxima simultánea |
| Pico de memoria de inicio | gráfico de llama en el rango de tiempo relevante |
Flujos de Trabajo Comunes
# Encontrar una fuga en un servicio
heaptrack ./myservice --run-workload
heaptrack_print -l heaptrack.myservice.*.zst | head -30
# Atribuir memoria pico durante una operación pesada (GUI es más fácil)
heaptrack ./batch-job
heaptrack_gui heaptrack.batch-job.*.zst # inspeccionar el gráfico de llama "peak"
# Reducir vaciado de asignación temporal en un bucle caliente
heaptrack_print -t heaptrack.*.zst | head
heaptrack vs Otras Herramientas de Memoria
| Aspecto | heaptrack | Valgrind (massif/memcheck) | Asignadores incorporados |
|---|
| Sobrecarga | Baja | Alta (memcheck muy alta) | Varía |
| Detección de fugas | Sí | Sí (memcheck) | Parcial |
| Vaciado de asignación | Sí (temporal) | massif se enfoca en pico | No |
| Interfaz | GUI rico + CLI | Texto / massif-visualizer | Ninguna |
| Mejor para | Perfilado rápido de montículo en ejecuciones realistas | Verificaciones de corrección profunda | Verificaciones rápidas |
Recursos