Perforator от Яндекса: открытое непрерывное профилирование и экономия на серверах

Perforator от Яндекса: открытое непрерывное профилирование и экономия на серверах

30 января 2025 года Яндекс выложил в опенсорс Perforator, свою систему непрерывного профилирования серверных приложений. По словам компании, оптимизация кода с его помощью может сэкономить до 20% затрат на серверы. Это оценка самого Яндекса, а не гарантия: реальная экономия зависит от того, сколько лишнего в вашем коде и готовы ли вы его переписывать.

Что такое Perforator

Это система continuous profiling: она постоянно собирает профили процессора с боевых серверов и показывает, на какие функции уходит CPU. По README, Perforator работает на десятках тысяч серверов Яндекса, а идея взята из Google-Wide Profiling, аналогичной системы Google. В статье на Хабре разработчики пишут, что внутри Яндекса им анализируют производительность большинства сервисов. Яндекс сам использует его для мониторинга нагрузки и оптимизации своих крупных сервисов, например Поиска и Рекламы.

Что умеет

  • собирает стеки ядра и пользовательского кода через eBPF;
  • раскручивает стеки без frame pointers и без отладочных символов на самом сервере;
  • хранит профили и бинарники в масштабируемом хранилище;
  • показывает результат флеймграфами, есть свой язык запросов и веб-интерфейс;
  • поддерживает C, C++, Go и Rust, а Java и Python экспериментально;
  • готовит профили для сборки с PGO (Profile Guided Optimization) через AutoFDO.

Важная деталь для тех, кто переживает за безопасность: всё работает в вашем контуре, данные о коде никуда не уходят. Это Яндекс отдельно подчёркивал в анонсе.

Требования и как попробовать

Perforator работает на x86-64 Linux. Агент на сервере берёт около 512 МБ памяти (на больших машинах с множеством ядер больше) и меньше 1% процессора. Попробовать можно двумя способами:

  • локально: команда perforator record профилирует программу на вашем компьютере, разработчики называют это более точной заменой perf record;
  • в кластере: для Kubernetes есть Helm-чарт, готовые бинарники лежат в релизах на GitHub.
# пример из документации: профилируем программу и смотрим флеймграф на localhost:1234
sudo ./perforator record --serve :1234 -- ./main

Лицензия Apache 2.0, а eBPF-программы и часть кода для поддержки OpenJDK под GPL 2.0. При запуске проекта была MIT, потом Яндекс перешёл на Apache 2.0.

Что с проектом сейчас

Проект живой. У репозитория больше 3 400 звёзд, коммиты идут постоянно. Релизы выходят нечасто: 0.0.6 в июле 2025 года, 0.0.7 в ноябре, а 0.1.0 в феврале 2026-го. Сами разработчики подчёркивают, что 0.1.0 не крупный выпуск, а просто поправка нумерации. В нём появился API для просмотра самых прожорливых функций и сервисов по всему кластеру и исправили ряд ошибок в агенте, CLI и интерфейсе.

Из планов, объявленных в 2025 году, поддержка Python и Java уже есть в экспериментальном виде. Второй обещанный пункт, интеграция с инструментами автоматической оптимизации кода, частично закрыт генерацией профилей для PGO.

Перед внедрением

  • проверьте, что ваш рантайм и ядро поддерживаются, особенно для Java и Python;
  • решите заранее, кто будет разбирать профили и чинить найденные горячие места, иначе графики так и останутся графиками;
  • снимите метрики до и после: загрузку CPU, задержки, число и размер серверов;
  • начните с одного нагруженного сервиса, а не со всего кластера.

В итоге Perforator это открытая система непрерывного профилирования, которая годами работает в Яндексе и подойдёт тем, у кого много серверов на C++, Go или Rust. Обещанные 20% экономии реальны только при полном цикле: собрали профили, переписали горячий код, уменьшили железо.

Источники и ссылки


Комментарии загружаются…