heaptrack - Heap Memory Profiler para Linux
heaptrack (por KDE) é um heap memory profiler para Linux. Ele rastreia todas as alocações de memória e anota cada uma com um stack trace, então você pode encontrar vazamentos, hotspots de alocação, alocações temporárias excessivas e uso máximo de memória. Ele registra um arquivo de dados enquanto seu programa funciona, depois o analisa com heaptrack_gui (gráficos de chama ricos e gráficos) ou heaptrack_print (linha de comando). A sobrecarga é baixa o suficiente para workloads realistas.
Instalação
| 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 |
| A partir do código-fonte | construa a partir do repo KDE/heaptrack (CMake) |
| Verificar | heaptrack --version |
Gravação
| Comando | Descrição |
|---|
heaptrack ./my-program args | Perfil de um comando desde o início |
heaptrack -p PID | Anexe a um processo em execução (baseado em GDB) |
heaptrack -o out.zst ./prog | Escreva para um arquivo de saída específico |
| Saída | Cria heaptrack.PROG.PID.zst no diretório atual |
Ao sair, heaptrack imprime um resumo e o caminho para o arquivo de dados registrado.
Analisando (GUI)
heaptrack_gui heaptrack.my-program.12345.zst
| Vista GUI | Mostra |
|---|
| Resumo | RSS máxima, alocações totais, bytes vazados |
| Gráfico de chama | Alocações atribuídas a stack calls |
| Top-down / bottom-up | Árvores de chamada por alocação |
| Caller/callee | Navegue relacionamentos de alocação |
| Gráficos | Alocações/vazamentos/temporário com o tempo |
Analisando (CLI)
# Imprima os hotspots de alocação superior no terminal
heaptrack_print heaptrack.my-program.12345.zst | less
| Métrica | Significado |
|---|
| peak | Máxima memória de heap realizada de uma vez |
| leaked | Memória alocada mas nunca liberada |
| allocations | Número total de alocações (churn) |
| temporary | Alocações liberadas quase imediatamente (desperdício) |
| Opção | Descrição |
|---|
-a, --print-peak | Ordene por consumidores de pico de memória |
-l, --print-leaks | Mostre vazamentos |
-t, --print-temporary | Mostre hotspots de alocação temporária |
-d, --diff FILE | Diff duas gravações |
Comparando Execuções (Diff)
# Veja o que mudou entre duas compilações/execuções
heaptrack_print -d before.zst after.zst
O Que Cada Métrica Lhe Diz
| Sintoma | Procure em |
|---|
| RSS do processo continua crescendo | leaked — alocações nunca liberadas |
| Alto custo do alocador de CPU | allocations / temporary — muito churn |
| OOM sob carga | peak — reduza max memória simultânea |
| Pico de memória de inicialização | gráfico de chama no intervalo de tempo relevante |
Workflows Comuns
# Encontre um vazamento em um serviço
heaptrack ./myservice --run-workload
heaptrack_print -l heaptrack.myservice.*.zst | head -30
# Atribua pico de memória durante uma operação pesada (GUI é mais fácil)
heaptrack ./batch-job
heaptrack_gui heaptrack.batch-job.*.zst # inspecione o gráfico de chama "peak"
# Reduza churn de alocação temporária em um loop quente
heaptrack_print -t heaptrack.*.zst | head
heaptrack vs Outras Ferramentas de Memória
| Aspecto | heaptrack | Valgrind (massif/memcheck) | Alocadores integrados |
|---|
| Sobrecarga | Baixa | Alta (memcheck muito alta) | Varia |
| Detecção de vazamento | Sim | Sim (memcheck) | Parcial |
| Churn de alocação | Sim (temporário) | massif foca no pico | Não |
| UI | GUI rica + CLI | Texto / massif-visualizer | Nenhuma |
| Melhor para | Profiling rápido de heap em execuções realistas | Verificações profundas de corretude | Verificações rápidas |
Recursos