Как ограничить количество одновременных запросов в Apache Tomcat?

«Как ограничить количество одновременных запросов в Apache Tomcat?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, управлять нагрузкой можно через настройки коннектора в файле conf/server.xml.

Ключевые параметры коннектора (протокол HTTP/1.1 или NIO):

Параметр Описание Значение по умолчанию
maxThreads Максимальное число рабочих потоков для обработки запросов. 200
acceptCount Размер очереди запросов, когда все потоки maxThreads заняты. 100
maxConnections Максимальное число одновременных соединений. Для HTTP/1.1 обычно равно maxThreads. Для NIO: 10000

Пример конфигурации в server.xml:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           maxThreads="500"
           acceptCount="100"
           maxConnections="500" />

Как это работает:

  1. Новые запросы обрабатываются свободными потоками (до maxThreads).
  2. Если потоки заняты, запросы помещаются в очередь (до acceptCount).
  3. При заполненной очереди новые соединения будут отклонены.

Для продвинутого контроля (например, rate limiting) потребуется:

  • Фронтенд-прокси (Nginx, Apache HTTP Server).
  • Кастомный Filter в приложении для подсчета запросов.
  • Специализированные инструменты (например, Resilience4j).