---
tags: [linux, cheatsheet, tooling]
verified: 2026-09-02
---

# Linux — справочник команд: фреймворки трассировки

[← Назад к обзору](./linux-perf-tools.md)

---

## perf

Главный профилировщик Linux. Семплирование, tracepoints, kprobes, uprobes, аппаратные счётчики.

```bash
# Профилирование CPU всей системы, 10 секунд
perf record -ag -- sleep 10
perf report

# Профилирование конкретного процесса с частотой 99 Hz
perf record -F 99 -p 1234 -g -- sleep 30

# Flame graph (через brendangregg/FlameGraph)
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg

# Аппаратные счётчики для процесса
perf stat -e cycles,instructions,cache-misses,branch-misses -p 1234 sleep 5

# Tracepoint: все page faults
perf record -e page-faults -ag -- sleep 5

# Kprobe: трассировка конкретной функции ядра
perf probe --add tcp_sendmsg
perf record -e probe:tcp_sendmsg -ag -- sleep 10
perf probe --del tcp_sendmsg
```

---

## Ftrace

Встроенный трассировщик ядра. Не требует установки, управляется файлами tracefs в `/sys/kernel/tracing`. Старый путь `/sys/kernel/debug/tracing` — совместимость: tracefs монтируется туда автоматически, но только если в системе смонтирован debugfs.

```bash
# Включить трассировку функции
echo function > /sys/kernel/tracing/current_tracer
echo tcp_sendmsg > /sys/kernel/tracing/set_ftrace_filter
echo 1 > /sys/kernel/tracing/tracing_on
cat /sys/kernel/tracing/trace_pipe
# Ctrl+C, затем:
echo 0 > /sys/kernel/tracing/tracing_on

# Граф вызовов функций
echo function_graph > /sys/kernel/tracing/current_tracer
echo ext4_file_write_iter > /sys/kernel/tracing/set_graph_function

# Быстрый вариант через trace-cmd
trace-cmd record -p function_graph -g ext4_file_write_iter sleep 5
trace-cmd report | head -50

# Трассировка событий (tracepoints)
trace-cmd record -e sched:sched_switch sleep 5
trace-cmd report
```

---

## bpftrace

Высокоуровневый язык eBPF-трассировки. Awk для трассировки.

```bash
# Подсчёт syscall по процессам
bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }'

# Гистограмма задержек read()
bpftrace -e 'tracepoint:syscalls:sys_enter_read { @start[tid] = nsecs; }
  tracepoint:syscalls:sys_exit_read /@start[tid]/ {
    @usecs = hist((nsecs - @start[tid]) / 1000);
    delete(@start, tid);
  }'

# Стеки ядра при block I/O
bpftrace -e 'tracepoint:block:block_rq_issue { @[kstack] = count(); }'

# Трассировка TCP retransmit с IP-адресами
bpftrace -e 'kprobe:tcp_retransmit_skb {
    $sk = (struct sock *)arg0;
    printf("retransmit: %s:%d -> %s:%d\n",
      ntop($sk->__sk_common.skc_rcv_saddr),
      $sk->__sk_common.skc_num,
      ntop($sk->__sk_common.skc_daddr),
      bswap($sk->__sk_common.skc_dport));  // dport big-endian
  }'

# Однострочник: кто читает файлы
# (с bpftrace 0.25 args в tracepoint требует BTF в ядре)
bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s %s\n", comm, str(args.filename)); }'
```

---

## bpftool 🟢

Управление BPF-программами, картами и ссылками. Диагностика eBPF-подсистемы.

```bash
# Список загруженных BPF-программ
bpftool prog list

# Детали конкретной программы (байткод, статистика)
bpftool prog show id 42

# Список BPF-карт (maps)
bpftool map list

# Содержимое карты
bpftool map dump id 15

# Список прикреплённых программ на интерфейсе (XDP/TC)
bpftool net list

# Экспорт программы в JSON (для автоматизации)
bpftool prog list -j
```

---

## libbpf-tools 🟢

CO-RE (Compile Once — Run Everywhere) инструменты. Скомпилированные бинарники, не требуют Python/BCC. Замена BCC-инструментов.

```bash
# Установка (из bcc-tools или libbpf-tools пакета)
# Или сборка из исходников: github.com/iovisor/bcc/tree/master/libbpf-tools

# Те же инструменты, что и BCC, но быстрее запускаются и легче:
biosnoop        # вместо BCC biosnoop.py
tcpconnect      # вместо BCC tcpconnect.py
opensnoop       # вместо BCC opensnoop.py
execsnoop       # вместо BCC execsnoop.py

# Преимущество: нет зависимости от заголовков ядра и Python,
# запуск за миллисекунды вместо секунд
```

---

## BCC 🔴

Python-обёртка для eBPF. Работает, но компилирует BPF-программы при каждом запуске — медленный старт, требует заголовки ядра.

```bash
# Те же инструменты, но через Python
/usr/share/bcc/tools/biosnoop
/usr/share/bcc/tools/tcpconnect

# В Debian/Ubuntu пакет называется bpfcc-tools, а инструменты лежат
# в /usr/sbin с суффиксом: opensnoop-bpfcc, execsnoop-bpfcc

# Для новых задач предпочтительнее libbpf-tools или bpftrace.
# BCC остаётся полезен для кастомных инструментов с Python API.
```

---

## sar

Исторические данные системной активности. Пакет sysstat собирает их по расписанию — через cron или, на systemd-системах, таймерами `sysstat-collect.timer` и `sysstat-summary.timer`.

```bash
# CPU за сегодня, каждые 10 минут
sar -u

# Память за сегодня
sar -r

# Сеть за сегодня
sar -n DEV

# Блочные устройства за сегодня
sar -d

# Данные за конкретную дату
sar -u -f /var/log/sysstat/sa25

# Всё сразу за вчера
sar -A -f /var/log/sysstat/sa$(date -d yesterday +%d)
```

---

## dmesg

Кольцевой буфер ядра. Аппаратные ошибки, OOM, паники, предупреждения драйверов.

```bash
# Последние сообщения с человекочитаемыми таймштампами
dmesg -T | tail -30

# Только ошибки и предупреждения
dmesg -T --level=err,warn

# Следить за новыми сообщениями (как tail -f)
dmesg -Tw

# Поиск OOM-событий
dmesg -T | grep -i "out of memory"

# Очистить буфер (требует root)
dmesg -C
```

---

## Связанные заметки

- [Linux — средства диагностики производительности](./linux-perf-tools.md) — обзорная карта инструментов
- [Linux — мониторинг и отладка](./linux-monitoring-debugging.md) — когда и зачем применять трассировку
- [Linux — справочник команд: приложения и системные вызовы](./linux-tldr-syscall.md) — уровень выше по стеку
