Вступить в клуб →
сложнаявопросSpring Boot и REST API

Медленный внешний API кладёт сервис целиком

Сервис на Spring MVC (блокирующая модель, пул потоков сервлет-контейнера) вызывает сторонний API через HTTP-клиент, у которого не заданы таймауты. Сторонний сервис деградировал: отвечает за 30-60 секунд вместо обычных 100 мс.

Через несколько минут сервис перестаёт отвечать целиком — таймаутами и 5xx завершаются даже те эндпоинты, которые вообще не ходят в этот API. Каково объяснение и что делать в первую очередь?

  • Причина в сборщике мусора: длинные ответы удерживают объекты в памяти, помогает увеличение размера heap
  • Каждый запрос удерживает поток сервлет-контейнера, медленные вызовы копят занятые потоки и пул исчерпывается: нужны таймауты, отдельный пул и circuit breaker
  • Дело в переиспользовании HTTP-соединений: надо отключить пул соединений и открывать новое соединение на каждый вызов
  • Достаточно увеличить размер пула потоков сервлет-контейнера — с запасом потоков хватит и на медленные вызовы, и на остальные

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела