Ответ вслух Middle Производительность и профилирование спрашивают часто обновлено

Сервис стал медленнее после релиза

Вопрос

Интервьюер: «После релиза p99 сервиса вырос с 150 до 400 мс, ошибок нет, нагрузка та же. Как найдёте причину?»

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Сначала убеждаюсь, что дело в релизе: разбиваю p99 по метке версии, если есть канарейка, сравниваю её со stable. Если откат быстрый и пользователи страдают, откатываю, разбираться можно и на канарейке.

Что должно прозвучать в ответе

  • Подтвердить связь с релизом: сравнить метрики по версиям, канарейка

  • Трейсы медленных запросов до и после: какой спан вырос

  • Если выросло ожидание зависимостей: новые запросы, N+1, пулы

  • Если выросло собственное время: профиль CPU и аллокаций, сравнение профилей версий

  • Ресурсы: троттлинг CPU, GC, память

  • Исправить или откатить, подтвердить метрикой

Что могут спросить следом

  • Что если профили версий выглядят одинаково?
  • Как предотвратить такие регрессии?

Разбор

Образцовый ответ: «Сначала убеждаюсь, что дело в релизе: разбиваю p99 по метке версии, если есть канарейка, сравниваю её со stable. Если откат быстрый и пользователи страдают, откатываю, разбираться можно и на канарейке. Дальше трейсы: беру медленные запросы новой версии и такие же запросы старой и смотрю, какой спан вырос. Если выросло ожидание базы, ищу новые запросы или N+1. Если выросло собственное время сервиса, сравниваю CPU-профили версий в Pyroscope, часто сразу видно новое широкое плато, например сериализация или регулярное выражение. Проверяю троттлинг CPU и паузы GC: новая версия могла начать больше аллоцировать. Исправляю и подтверждаю метрикой. На будущее: бенчмарки горячих путей в CI и автоматический анализ канарейки по задержке».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.