Перейти к основному содержимому

Инструменты для анализа производительности и отладки

Когда программа падает, «тормозит» или жрёт память, недостаточно print(). Нужны отладчик (пошаговое выполнение, точки останова), профайлер (где тратится CPU/RAM) и в продакшене — наблюдаемость (метрики, логи, трейсы).

Загрузка интерактивного демо…

Системные метрики (CPU, RAM, диск, сеть)

Загрузка интерактивного демо…
ИнструментПлатформаНазначение
htop / btopLinux, macOSИнтерактивный список процессов
vmstat, iostat, mpstatLinux (sysstat)Память, диск, CPU в CLI
dstatLinuxСводка ресурсов в одном окне
Process ExplorerWindowsРасширенный диспетчер задач
CrystalDiskMarkWindowsТест скорости диска

Linux: трассировка и профилирование ядра

strace

Трассировка системных вызовов процесса — что реально спрашивает у ядра (файлы, сокеты).

strace -f -e open,read,write -p PID
strace -c ./myapp # сводка по syscall

perf

Аппаратные счётчики CPU: циклы, cache miss, ветвления.

perf record -g ./myapp
perf report

eBPF / bpftrace

Динамическая трассировка без пересборки ядра; основа современных observability-агентов.

lsof

Какие файлы и сокеты открыты процессом: lsof -i :443.

sysdig

Объединяет идеи strace, tcpdump и метрик контейнеров.


Отладка C, C++, нативного кода

gdb (GNU Debugger)

gdb ./program
(gdb) break main
(gdb) run
(gdb) next
(gdb) print variable

LLDB

Отладчик LLVM; по умолчанию в Xcode, подходит для C/C++/Swift.

Valgrind

Динамический анализ: утечки памяти, обращения вне буфера (memcheck), гонки (helgrind).

valgrind --leak-check=full ./program

WinDbg

Отладка дампов и ядра Windows; расширения для .NET и native.

ProcDump (Sysinternals)

Снятие дампа по порогу CPU или при исключении.


.NET

ИнструментОписание
Visual Studio Diagnostic ToolsCPU, память, события GC в IDE
dotTrace / dotMemory (JetBrains)Профилирование и heap (.NET)
PerfView (Microsoft)ETW-трассы, GC, JIT (Windows)

JVM (Java, Kotlin)

ИнструментОписание
JProfiler, YourKitКоммерческие профайлеры CPU/RAM
Java VisualVM, JConsoleВходят в JDK / отдельно
Async ProfilerFlame graphs с низким overhead
MAT (Eclipse)Анализ heap-дампов
JFRFlight Recorder в современных JDK

Python

# Стандартная библиотека
python -m cProfile -o stats.prof script.py

# Без остановки процесса
py-spy record -o profile.svg --pid PID

memory_profiler — построчное потребление RAM; Scalene — CPU/GPU/RAM по строкам.


Go

pprof встроен в runtime:

go test -cpuprofile=cpu.prof
go tool pprof cpu.prof

Сеть

Загрузка интерактивного демо…
ИнструментНазначение
tcpdumpЗахват пакетов в CLI
WiresharkРазбор pcap, фильтры display
Prometheus + node_exporterМетрики хоста и сервисов

Observability в продакшене

Загрузка интерактивного демо…
КомпонентРоль
PrometheusСбор и хранение метрик (pull)
GrafanaДашборды, алерты
OpenTelemetryЕдиный SDK для traces/metrics/logs
LTTng, SystemTapНизкоуровневая трассировка Linux
NetdataБыстрый локальный дашборд

:::tip Три сигнала Метрики — «сколько и как быстро». Логи — «что случилось». Трейсы — «какой путь запроса через сервисы». Вместе они сокращают время поиска узкого места. :::


Веб и front-end

Загрузка интерактивного демо…
ИнструментМетрики
Chrome DevTools → PerformanceFPS, JS, layout, LCP
Firefox ProfilerСмешанные стеки JS + native
LighthouseCore Web Vitals, доступность

Нагрузочное тестирование

Связывает профилирование с нагрузкой: JMeter, k6, Gatling — см. тестирование.


Визуализация профилей

Flame graph (Brendan Gregg) — иерархия стеков: ширина = доля времени. Строится из вывода perf, py-spy, Async Profiler, pprof.


Мобильные платформы

ИнструментПлатформа
Xcode InstrumentsiOS, macOS
Android ProfilerAndroid Studio
Intel VTune / AMD uProfНизкоуровневый CPU (x86)

См. также


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).