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