⚙️application / jvm

Голодание пула потоков Tomcat

middle30 min🏢 Travel booking platform (peak holiday season)
JavaTomcatThread PoolBlocking I/OSpring MVCLoad Testing

Стек технологий

  • Java 17
  • Spring MVC 6
  • Tomcat 10
  • PostgreSQL 15
  • Redis 7
🚨

Сценарий инцидента

Booking API идеально обрабатывает стабильную нагрузку (150 RPS) — P95 менее 120ms.
Во время флеш-распродажи трафик вырастает до 450 RPS. Через 90 секунд время ответа подскакивает до 30s, начинают появляться HTTP 503.
CPU остаётся на уровне 35%. Хип в норме. GC работает нормально. Приложение не «падает» — оно просто перестаёт отвечать.
Что происходит?

🔍 Артефакты расследования

Раскрывай артефакты один за другим. Каждая улика приближает тебя к корневой причине.

📊
Улика #1 · graph
Метрики задержки и пула потоков
💡 Обратите внимание на связь между активными потоками и задержкой — что происходит, когда потоки достигают максимума?
📋
Улика #2 · log
Анализ дампа потоков
💡 Чего ждут потоки? CPU или чего-то другого?
⚙️
Улика #3 · config
Конфигурация Tomcat и HikariCP
💡 Какова взаимосвязь между размером пула потоков и размером пула соединений?
⚙️
Улика #4 · config
BookingService — поток запроса
💡 Можно ли распараллелить или объединить в батч 3 запроса к БД?