Heaptrack

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

作者 mohitmishra786bdc58472fa9f无许可证253 个星标收录于 2026年10月9日更新于 2026年10月9日仓库3个月前更新

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.

AI 生成的概览

指导代理在 Linux 上使用 heaptrack 进行堆分析,查找泄漏、热点和峰值内存占用。

功能
该技能提供在 Linux 上使用 heaptrack 内存分析器的说明,涵盖安装、记录分配跟踪,以及用 heaptrack_print 或图形界面进行分析。它讲解如何解读 heaptrack_print 输出、筛选结果、比较两次运行,并通过系统分配器分析 Rust 二进制文件。它还包含 heaptrack 与 Valgrind massif 的对比,并指向一份分析参考文档。
适用场景
适用于跟踪堆分配、排查内存泄漏、测量堆峰值占用、定位分配热点,或比较不同程序运行之间的分配行为。也适合回答关于 heaptrack、heaptrack_print 输出或 Linux 堆分析的问题。
运行要求
需要在 Linux 上安装 heaptrack,可选安装 heaptrack-gui 以及用于可视化的 flamegraph 工具;程序应带调试符号构建以获得可读的调用栈。该技能不附带脚本,仅包含说明和一份参考文档。

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

来源与署名

来源:mohitmishra786/low-level-dev-skills位于skills/profilers/heaptrack提交bdc5847

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架