Heaptrack

mohitmishra786/low-level-dev-skills/skills/profilers/heaptrack

by mohitmishra786bdc58472fa9fNo license253 starsListed Oct 9, 2026Updated Oct 9, 2026Repository updated 3 months ago

heaptrack memory profiler skill for Linux. Use when tracking heap allocations, finding memory leaks, measuring peak heap usage, identifying allocation hotspots, or comparing allocation behaviour between runs. Activates on queries about heaptrack, heap profiling, memory allocation analysis, heaptrack_print, allocation hotspots, or memory leak detection with heaptrack.

Instructions onlySoftware Development
AI-generated overview

Guides agents through heaptrack heap profiling on Linux to find leaks, hotspots and peak memory use.

What it does
This skill provides instructions for using the heaptrack memory profiler on Linux, covering installation, recording allocation traces, and analysing them with heaptrack_print or the GUI. It explains how to read heaptrack_print output, filter results, compare two runs, and profile Rust binaries via the system allocator. It also includes a comparison of heaptrack with Valgrind massif and points to a reference file on analysis.
When to use it
Use it when tracking heap allocations, hunting memory leaks, measuring peak heap usage, identifying allocation hotspots, or comparing allocation behaviour between program runs. It suits questions about heaptrack, heaptrack_print output, or heap profiling on Linux.
Requirements
Requires heaptrack on Linux, optionally heaptrack-gui and flamegraph tooling for visualisation; programs should be built with debug symbols for readable backtraces. No scripts are shipped; the skill is instructions plus a reference document.

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

bash
# Ubuntu/Debiansudo apt-get install heaptrack heaptrack-gui
# Fedorasudo dnf install heaptrack
# Archsudo pacman -S heaptrack
# Build from sourcegit clone https://github.com/KDE/heaptrack.gitcmake -S heaptrack -B heaptrack-build -DCMAKE_BUILD_TYPE=Releasecmake --build heaptrack-build -j$(nproc)

2. Basic usage

bash
# Profile a program (generates heaptrack.<prog>.<pid>.zst)heaptrack ./myapp arg1 arg2
# Attach to running processheaptrack --pid 12345
# Analyse the trace fileheaptrack_print heaptrack.myapp.12345.zst
# GUI analysis (if heaptrack-gui installed)heaptrack_gui heaptrack.myapp.12345.zst

3. Build for better profiling

bash
# Build with debug symbols (essential for readable backtraces)cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfocmake --build build
# Then profileheaptrack ./build/myapp

4. Interpreting heaptrack_print output

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

Key sections:

text
total runtime: 2.34scalls to allocation functions: 145,234 (62,064/s)temporary allocations: 89,123 (38,087/s)peak heap memory consumption: 45.23MBpeak RSS (including heap): 78.45MBtotal 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 allocationsleak 1: 2.34MB leaked in 1,234 allocations  myapp::connection::Connection::new(...)    at src/connection.cpp:67
MetricMeaning
total memory leakedMemory allocated but never freed
peak heap consumptionMaximum live heap at any point
temporary allocationsAllocated and freed within one call stack
calls to allocation functionsTotal malloc/new/realloc calls

5. Filtering and analysis options

bash
# Show top N hotspotsheaptrack_print -p 10 heaptrack.myapp.*.zst  # top 10 hotspots
# Show flamegraph dataheaptrack_print -f heaptrack.myapp.*.zst > alloc.foldedflamegraph.pl alloc.folded > alloc.svg
# Show only leaked allocationsheaptrack_print -l heaptrack.myapp.*.zst
# Show allocations above thresholdheaptrack_print --min-cost 1048576 heaptrack.myapp.*.zst  # >1MB only
# Short summaryheaptrack_print -s heaptrack.myapp.*.zst

6. Comparing two runs

bash
# Record baselineheaptrack ./myapp --config baseline.confmv heaptrack.myapp.*.zst before.zst
# Make changes, record againheaptrack ./myapp --config new.confmv heaptrack.myapp.*.zst after.zst
# Compare (shows diff of hotspots)heaptrack_print before.zst | head -20 > before.txtheaptrack_print after.zst  | head -20 > after.txtdiff before.txt after.txt

7. heaptrack vs Valgrind massif

FeatureheaptrackValgrind massif
Overhead~2-3x~20x
OutputCompressed trace + GUIText/ms_print
Leak detectionYesYes
Peak trackingYesYes
Temporal viewYes (GUI)Yes (ms_print)
PlatformLinux onlyLinux, macOS
Needs recompileNoNo
Call graphFull stack tracesFull stack traces

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

8. Integration with Rust

heaptrack works with Rust binaries when using the system allocator:

rust
// Rust: use system allocator so heaptrack can interceptuse std::alloc::System;#[global_allocator]static A: System = System;
bash
# Profile Rust binarycargo build --releaseheaptrack ./target/release/myapp
# Note: debug symbols improve backtracescargo build --profile release-with-debugheaptrack ./target/release-with-debug/myapp

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

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 and attribution

Source:mohitmishra786/low-level-dev-skillsinskills/profilers/heaptrackat commitbdc5847

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal