К основному содержанию
скилл CX Codex

heaptrack — скилл для Claude Code: профилирование кучи в Linux

Ведёт агента по heaptrack: запись трасс аллокаций, разбор через heaptrack_print, поиск утечек и сравнение запусков.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mohitmishra786/low-level-dev-skills --skill heaptrack -a claude-code
Открыть на GitHub

Что делает heaptrack

Скилл объясняет агенту, как снимать профиль кучи в Linux и что делать с полученной трассой. Запись идёт командой heaptrack ./myapp arg1 arg2, рядом лежит вариант с подключением к уже запущенному процессу через heaptrack --pid. На выходе получается сжатый файл вида heaptrack.<prog>.<pid>.zst, который потом разбирают через heaptrack_print или открывают в heaptrack_gui.

Отдельный блок посвящён чтению вывода: агент разбирает строки про общее время работы, число вызовов аллокаторов, временные аллокации, пиковое потребление кучи и объём утёкшей памяти, а затем показывает горячие точки и утечки с привязкой к файлу и строке. Есть фильтры — топ N горячих точек, только утечки, порог по размеру аллокации, данные для флеймграфа. Для читаемых бэктрейсов программу надо собрать с отладочными символами, например -DCMAKE_BUILD_TYPE=RelWithDebInfo; без них стек будет малоинформативным. Это повод проверить флаги сборки до первого запуска, а не после.

Внутри есть сравнение с Valgrind massif по накладным расходам, формату вывода, поддержке платформ и необходимости пересборки. Отдельный раздел про Rust: heaptrack перехватывает аллокации только при системном аллокаторе, поэтому в коде нужен #[global_allocator] со System. Скилл ссылается на соседние материалы по valgrind, linux-perf, профилированию Rust и санитайзерам.

Какие задачи решает

  • найти, где программа съедает память
  • поймать утечку и увидеть место в коде
  • сравнить потребление кучи между двумя версиями сборки
  • получить данные для флеймграфа аллокаций
  • отфильтровать крупные аллокации по порогу

Примеры запросов агенту

  • Прогони мой C++ бинарник через heaptrack и покажи топ горячих точек по пиковой памяти
  • Разбери heaptrack_print по этому файлу и найди утечки
  • Сравни два запуска heaptrack до и после моих правок

Как установить heaptrack

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill heaptrack -a claude-code

2Вручную: положить файлы

~/.claude/skills/heaptrack/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/heaptrack/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора62

simd-intrinsics Скилл ведёт агента через ручную векторизацию: чтение отчётов авто-векторизации, интринсики SSE2/AVX2/NEON и проверка флагов CPU в рантайме. CX Codex +1 645установок elf-inspection Ведёт агента по readelf, objdump, nm и ldd: зависимости, символы, секции, отладочная информация и ошибки линковки. CX Codex +1 640установок linux-kernel-modules Ведёт агента по написанию и отладке загружаемых модулей ядра Linux: Kbuild, параметры модуля, /proc, sysfs, символьные устройства, KGDB и ftrace. CX Codex +1 639установок memory-model Скилл для работы с моделью памяти C++ и Rust: подсказывает, какой memory order выбрать, и разбирает гонки данных в атомиках. CX Codex +1 634установок msvc-cl Подсказывает агенту, как компилировать C и C++ через MSVC cl.exe и clang-cl: флаги, рантайм, PDB, ошибки линковки. CX Codex +1 617установок linkers-lto Скилл для настройки линкеров GNU ld, gold и lld, разбора ошибок порядка библиотек и включения LTO в реальных проектах. CX Codex +1 608установок binutils Скилл для работы с бинарниками: статические библиотеки, strip, objcopy, addr2line, strings и c++filt. Пригодится, когда агент должен сам разобраться с постобработкой ELF. CX Codex +1 608установок dynamic-linking Скилл для работы с динамической линковкой в Linux: разбирает ошибки загрузки .so, настройку RPATH и RUNPATH, версионирование soname. CX Codex +1 600установок

Похожие

memory-safety-patterns Seth Hobson Скилл помогает писать код на Rust, C++ и C с учётом владения памятью, RAII и управления ресурсами. Подойдёт для системного кода и поиска ошибок памяти. CX Codex 11 746установок migrate-to-rust официальный google Скилл переносит кодовые базы C++, Fortran, Java, Python и C на безопасный Rust с замерами производительности. CX Codex 538установок soak-test Donchitos Готовит протокол soak-теста: что наблюдать и записывать на длинной сессии, чтобы поймать утечки памяти и усталость от механик. CX Codex +1 413установок debian-linux-triage официальный github Скилл помогает разбирать проблемы Debian Linux через apt, systemd и dpkg, учитывая AppArmor и firewall. Подойдёт для диагностики с пошаговой проверкой. 9 197установок fedora-linux-triage официальный github Скилл помогает разбирать проблемы Fedora через dnf, systemd и проверки SELinux. Подойдёт, когда нужен пошаговый план диагностики с командами. 8 800установок container-escape-techniques yaklang Плейбук по выходу из Docker, LXC и Kubernetes-подов на хост: привилегированный режим, capabilities, docker.sock, cgroup. CX Codex +1 3 600установок

Рядом в теме «Языки программирования»

Все скиллы по теме «Языки программирования» →

Вопросы о heaptrack

Как установить heaptrack в Claude?

Выполните npx skills add mohitmishra786/low-level-dev-skills --skill heaptrack -a claude-code. Скилл окажется в ~/.claude/skills/heaptrack/SKILL.md.

Что делает скилл heaptrack?

Проводит агента по профилированию кучи в Linux: запись трассы, разбор через heaptrack_print, поиск утечек и горячих точек, сравнение запусков.

Чем heaptrack отличается от Valgrind massif?

Накладные расходы у heaptrack ниже, вывод — сжатая трасса с возможностью открыть её в GUI. Massif стоит брать, когда нужна переносимость за пределы Linux или детальное сравнение снимков.

Исходный текст

SKILL.md · MIT
---
name: heaptrack
description: 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.
---

# 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/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)
```

### 2. Basic usage

```bash
# 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
```

### 3. Build for better profiling

```bash
# Build with debug symbols (essential for readable backtraces)
cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build

# Then profile
heaptrack ./build/myapp
```

### 4. Interpreting heaptrack_print output

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

Key sections:

```text
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 |

### 5. Filtering and analysis options

```bash
# 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
```

### 6. Comparing two runs

```bash
# 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
```

### 7. 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.

### 8. Integration with Rust

heaptrack works with Rust binaries when using the system allocator:

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

```bash
# 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](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

© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой