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% экономии реальны только при полном цикле: собрали профили, переписали горячий код, уменьшили железо.