Это случай преждевременной оптимизации и непонимания того, как на самом деле работает Jetty или ваше собственное веб-приложение.
Совет, не настраивайте преждевременно QueuedThreadPool
.
Оставьте его по умолчанию тестируйте и снова тестируйте, а затем выполните нагрузочное тестирование, затем снова выполните нагрузочное тестирование, но другим способом. Постоянно собирайте информацию о том, как ведет себя QueuedThreadPool
по умолчанию.
Затем, и только тогда, вы должны настроить QueuedThreadPool
в соответствии со своими потребностями.
Но никогда не останавливайтесь мониторинг вашего сервера и веб-приложения, так как вы будете часто изменять свою конфигурацию. (особенно, если вы настроили QueuedThreadPool
меньше, чем по умолчанию)
Важно: если вам нужно ограничить количество запросов или подключений, или контролировать количество или скорость запросов или подключений , попытка сделать это на уровне ThreadPool никогда не сработает.
Эта диаграмма неверна (или как минимум на 10 лет устарела).
Начиная с Jetty 7, нет связи В очереди нет разделения потоков Acceptors и Request.
Пул потоков (который на самом деле представляет собой просто java.util.concurrent.Executor
) используется для ALL потоков потоков на сервере Jetty. Это может быть прием соединения, обработка управляемого селектора nio, обработка отдельных селекторов nio, обработка событий чтения из сети, обработка начальной отправки запроса, обработка событий записи из веб-приложения в сеть, обработка asyn c обработка из Servlet 3.0, QoSFilter, DoSFilter, обработка asyn c I / O из Servlet 3.1, обновленные соединения, веб-сокет, управление HttpSession, обработка горячего развертывания, сканирование байт-кода и т. д. c.
С ограничение в 50 макс. потоков:
- Вам никогда не понадобится другой акцептор.
- Вы заставите клиентов голодать и вызовете серьезные проблемы.
- A Типичная веб-страница, которую загружает браузер, будет использовать от 8 до 12 подключений, что означает, что при этой конфигурации с максимальным количеством потоков 50 сможет обрабатывать от 4 до 6 клиентов одновременно.
Типы приложений, которые нуждаются в другой акцептор - это те, которые обрабатывают огромное количество новых соединений (для Eclipse Jetty вам обычно нужен другой приемник, когда вы пересекаете порог в 30 000 новых подключений в секунду).
Количество принимающих устройств, которые использует Jetty, настраивается на уровне ServerConnector, а не на уровне ThreadPool.
Посмотрите на конструкторы ServerConnector и выберите конструктор, наиболее подходящий для вашей среды.