perf & Графики пламени

Тема дорожной карты · Linux & Unix Fundamentals

perf — это встроенный профилировщик ядра Linux, который позволяет семплировать CPU-стеки через аппаратные PMU (Performance Monitoring Units), а также трассировать syscall'ы и события планировщика. Этот инструмент широко используется для анализа производительности и отладки систем. Например, команда perf record -F 99 -ag -- sleep 30 собирает на-CPU стеки по всей системе, а затем perf report показывает дерево стеков, либо данные передаются в скрипты stackcollapse-perf.pl и flamegraph.pl Брендана Грегга для создания интерактивного Flame Graph. Для корректного сбора стеков необходимо наличие debug-символов ядра и использование опций --call-graph dwarf (или fp/lbr). Учитывайте также значение perf_event_paranoid в /proc/sys/kernel/.

Как это работает

perf & Графики пламени используют методологию USE (Utilisation, Saturation, Errors) и четыре золотых сигнала (latency, traffic, errors, saturation). Инструменты, которые используются для мониторинга и анализа производительности, включают в себя top/htop/atop (для анализа процессов), vmstat 1 (для анализа CPU и памяти), iostat -x 1 (для анализа работы диска), mpstat -P ALL 1 (для анализа работы каждого CPU), pidstat 1 (для анализа I/O и CPU каждого процесса), free -h (для анализа использования памяти), и dstat (для мульти-метрики). perf используется для профилирования ядра, а bpftrace/bcc-tools — для eBPF-трейсинга. Прочтите диаграммы Брендана Грегга один раз, чтобы лучше понять, как использовать эти инструменты.

Когда применять

Перед тем как начать оптимизацию, необходимо выполнить профилирование системы. Догадки о проблемах обычно неверны, поэтому важно начать с базового анализа, используя htop и iostat -x 1, чтобы заметить очевидные CPU/IO-сатурации. Затем можно углубиться в более детальное профилирование с помощью perf top или eBPF. Для HTTP-сервисов важно смотреть на upstream-метрики (latency p95/p99, error rate), так как боттлнек может быть не в Linux, а в downstream-БД. Используйте Prometheus + node_exporter на каждом production-хосте с самого начала, чтобы иметь возможность мониторить производительность системы.

Типичные ошибки

Одной из основных ловушек при использовании perf & Графиков пламени является то, что часто люди смотрят только на средний load (uptime), вместо того чтобы анализировать процентили. Также распространенной ошибкой является то, что люди считают high load равной нагрузке на CPU, когда это может быть uninterruptible-IO wait (top D-state). Другой распространенной ошибкой является изменение параметров ядра из блог-постов без глубокого понимания их влияния (sysctl-бомбы). Также важно не забывать, что оставленный tracing/ftrace в production может привести к перегрузке системы (perf-хит). Перед тем как начать тюнинг системы, убедитесь, что вы знаете её базовое состояние, и помните, что "лучше" нельзя узнать без замера.

Связанные понятия

Полезные ресурсы