Непрерывное профилирование

Тема дорожной карты · Observability

Непрерывное профилирование — это практика сбора профилей CPU, памяти, горутин и других параметров среды выполнения из продакшен-сервисов с низкой, постоянной частотой, их хранения во времени и запроса для понимания регрессий производительности и паттернов потребления ресурсов. В отличие от разовых сессий профилирования, запускаемых разработчиками на их ноутбуках, непрерывное профилирование фиксирует то, что реально происходит в продакшене под фактической нагрузкой, что делает его четвёртым столпом наблюдаемости наряду с метриками, логами и трассировками. Такие инструменты, как Grafana Pyroscope и Polar Signals, реализуют непрерывное профилирование, запуская лёгкий агент рядом с каждым сервисом, который периодически собирает профили и отправляет их в центральный бэкенд для хранения и анализа. Непрерывное профилирование интегрируется с Grafana, позволяя инженерам коррелировать CPU-флейм-графы со скачками метрик Prometheus и распределёнными трассировками — определяя не просто то, что сервис работает медленно, а какая конкретная функция потребляет больше всего ресурсов. Непрерывное профилирование обычно добавляет менее 1-2% накладных расходов на CPU, что делает его практически применимым в продакшене без влияния на SLO.

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

Непрерывное профилирование — 4-й столп observability: always-on профилирование CPU, памяти, lock contention, goroutines/threads. Инструменты: Pyroscope (теперь часть Grafana, поддерживает много языков), Polar Signals Parca, datadog-profiler, async-profiler (JVM), pprof (Go встроен). Найдите медленную функцию в production без повторного запуска с прицепленным профайлером. Flame graphs — каноническая визуализация. Overhead sampling обычно < 5%.

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

Включите continuous profiling для любого сервиса с performance-sensitive кодом (latency-sensitive API, batch-jobs). Pyroscope/Parca — open-source выбор; включите per-language профайлеры (net/http/pprof для Go, pyflame / py-spy для Python, async-profiler для JVM). Профайлите в production — staging показывает другие паттерны. Комбинируйте с traces для "какой span = какая функция".

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

Ловушки Непрерывное профилирование: overhead профайлинга не трекается (иногда > 10% — sampling rate важен); профили без service-контекста (какая версия? какая env?); профайлят всё, но никогда не читают данные ("они у нас есть" != "мы их используем"); flame graphs без фильтрации (одна гигантская башня прячет всё остальное).

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

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