> Какой план действий при перегрузке CPU и срабатывании алерта (Go)

Уровень: middle · Роль: backend · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

При срабатывании алерта по перегрузке CPU в Go-приложении действую по следующему плану:

  1. Оценка масштаба и контекста - проверяю метрики (Grafana, Prometheus): загрузка CPU, количество горутин, память, частота GC, latency запросов. Смотрю, затронут ли один инстанс или все.

  2. Быстрая диагностика - подключаюсь к инстансу, запускаю pprof:

    • go tool pprof http://host/debug/pprof/profile?seconds=30 - профиль CPU.

    • go tool pprof http://host/debug/pprof/goroutine - стек горутин. Анализирую, где больше всего времени: горячие функции, блокировки, частые аллокации.

  3. Проверка очередей и внешних зависимостей - смотрю, не забиты ли каналы, не увеличилось ли время ответа от БД/Redis/API. Часто перегрузка CPU - следствие retry или ожидания.

  4. Временные меры - если проблема критична:

    • Увеличиваю количество реплик (kubectl scale) для распределения нагрузки.

    • Временно отключаю неважные фоновые задачи (например, очистку кэша, агрегацию метрик).

    • Если есть rate limiter - снижаю лимиты.

  5. Глубокий анализ - смотрю логи на предмет паники или бесконечных циклов. Проверяю, не появился ли новый код с неоптимальными алгоритмами (например, O(n²) вместо O(n)). Ищу утечки горутин через runtime.NumGoroutine().

  6. Фикс и деплой - исправляю код (оптимизация, кэширование, пул воркеров), прогоняю нагрузочные тесты, деплою с канареечным релизом.

  7. Постмортем - добавляю алерт на ранние признаки (например, рост времени GC или числа горутин), улучшаю мониторинг.

Ключевое - не паниковать, а методично сужать круг поиска, начиная с pprof.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью