heaptrack

Guide agents through heaptrack for heap allocation profiling on Linux: recording allocation traces, analysing with heaptrack_print, identifying leaks and hotspots, and comparing runs.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "heaptrack" with this command: npx skills add mohitmishra786/low-level-dev-skills/mohitmishra786-low-level-dev-skills-heaptrack

heaptrack

Purpose

Guide agents through heaptrack for heap allocation profiling on Linux: recording allocation traces, analysing with heaptrack_print, identifying leaks and hotspots, and comparing runs.

Triggers

  • "How do I find memory allocation hotspots in my C++ program?"

  • "My program uses too much memory — how do I find where?"

  • "How do I use heaptrack to detect memory leaks?"

  • "What is heaptrack and how does it differ from Valgrind massif?"

  • "How do I compare memory usage between two program versions?"

  • "heaptrack_print output — how do I interpret it?"

Workflow

  1. Installation

Ubuntu/Debian

sudo apt-get install heaptrack heaptrack-gui

Fedora

sudo dnf install heaptrack

Arch

sudo pacman -S heaptrack

Build from source

git clone https://github.com/KDE/heaptrack.git cmake -S heaptrack -B heaptrack-build -DCMAKE_BUILD_TYPE=Release cmake --build heaptrack-build -j$(nproc)

  1. Basic usage

Profile a program (generates heaptrack.<prog>.<pid>.zst)

heaptrack ./myapp arg1 arg2

Attach to running process

heaptrack --pid 12345

Analyse the trace file

heaptrack_print heaptrack.myapp.12345.zst

GUI analysis (if heaptrack-gui installed)

heaptrack_gui heaptrack.myapp.12345.zst

  1. Build for better profiling

Build with debug symbols (essential for readable backtraces)

cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo cmake --build build

Then profile

heaptrack ./build/myapp

  1. Interpreting heaptrack_print output

heaptrack_print heaptrack.myapp.*.zst 2>/dev/null

Key sections:

total runtime: 2.34s calls to allocation functions: 145,234 (62,064/s) temporary allocations: 89,123 (38,087/s) peak heap memory consumption: 45.23MB peak RSS (including heap): 78.45MB total memory leaked: 2.34MB

Top allocation hotspots (by peak memory)

hotspot 1: 12.34MB peak myapp::cache::Cache::insert(...) at src/cache.cpp:142 ...

Top leaked allocations

leak 1: 2.34MB leaked in 1,234 allocations myapp::connection::Connection::new(...) at src/connection.cpp:67

Metric Meaning

total memory leaked

Memory allocated but never freed

peak heap consumption

Maximum live heap at any point

temporary allocations

Allocated and freed within one call stack

calls to allocation functions

Total malloc/new/realloc calls

  1. Filtering and analysis options

Show top N hotspots

heaptrack_print -p 10 heaptrack.myapp.*.zst # top 10 hotspots

Show flamegraph data

heaptrack_print -f heaptrack.myapp.*.zst > alloc.folded flamegraph.pl alloc.folded > alloc.svg

Show only leaked allocations

heaptrack_print -l heaptrack.myapp.*.zst

Show allocations above threshold

heaptrack_print --min-cost 1048576 heaptrack.myapp.*.zst # >1MB only

Short summary

heaptrack_print -s heaptrack.myapp.*.zst

  1. Comparing two runs

Record baseline

heaptrack ./myapp --config baseline.conf mv heaptrack.myapp.*.zst before.zst

Make changes, record again

heaptrack ./myapp --config new.conf mv heaptrack.myapp.*.zst after.zst

Compare (shows diff of hotspots)

heaptrack_print before.zst | head -20 > before.txt heaptrack_print after.zst | head -20 > after.txt diff before.txt after.txt

  1. heaptrack vs Valgrind massif

Feature heaptrack Valgrind massif

Overhead ~2-3x ~20x

Output Compressed trace + GUI Text/ms_print

Leak detection Yes Yes

Peak tracking Yes Yes

Temporal view Yes (GUI) Yes (ms_print)

Platform Linux only Linux, macOS

Needs recompile No No

Call graph Full stack traces Full stack traces

Use heaptrack for most cases; use massif when you need platform portability or detailed snapshot comparison.

  1. Integration with Rust

heaptrack works with Rust binaries when using the system allocator:

// Rust: use system allocator so heaptrack can intercept use std::alloc::System; #[global_allocator] static A: System = System;

Profile Rust binary

cargo build --release heaptrack ./target/release/myapp

Note: debug symbols improve backtraces

cargo build --profile release-with-debug heaptrack ./target/release-with-debug/myapp

For heaptrack_print output reference and GUI usage, see references/heaptrack-analysis.md.

Related skills

  • Use skills/profilers/valgrind for Memcheck (correctness) and massif (alternative heap profiler)

  • Use skills/profilers/linux-perf for CPU profiling alongside memory profiling

  • Use skills/rust/rust-profiling for Rust-specific allocation profiling approaches

  • Use skills/runtimes/sanitizers — ASan LeakSanitizer for leak detection without profiling overhead

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

cmake

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

static-analysis

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

llvm

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

gdb

No summary provided by upstream source.

Repository SourceNeeds Review