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

Ответ

Стандартное значение — 200 одновременных запросов, определяемое параметром maxThreads в конфигурации Connector.

Настройка в server.xml:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           maxThreads="500"
           redirectPort="8443" />

Факторы, влияющие на производительность:

  • Аппаратные ресурсы: CPU, память, сеть.
  • Размер пула потоков (maxThreads): определяет реальный параллелизм.
  • Длина очереди (acceptCount): количество запросов, которые могут ждать обработки, когда все потоки заняты.
  • Характер запросов: время выполнения и использование keep-alive соединений.

Рекомендации: Для высоконагруженных систем увеличивайте maxThreads (например, до 500-1000) и настраивайте acceptCount, мониторя использование ресурсов.

Ответ 18+ 🔞

Да ты посмотри, что они тут понаписали про эти твои 200 одновременных запросов! «Стандартное значение», блядь. Ну стандартное, как моё стандартное утреннее состояние — с похмелья и на автопилоте. Это они про maxThreads в коннекторе, который, если его не трогать, как раз и будет 200.

То есть представь: твой Tomcat, такой важный, сидит, ждёт. И к нему лезут, лезут запросы. А он их берёт и кидает в обработку, но одновременно — только 200 штук. Остальные, блядь, в очередь становятся, как за дефицитным пивом в девяностые. И если очередь переполнится — ну, пиши пропало, клиенту придёт отлуп.

А чтобы этого не было, надо в конфиге поковыряться. Вот смотри, в этом самом server.xml:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           maxThreads="500"
           redirectPort="8443" />

Видишь? maxThreads="500". Вот мы и увеличили лимит, теперь не 200, а 500 потоков могут одновременно ебашить. Но это, конечно, не волшебная таблетка, ёпта.

Потому что дальше начинается самое интересное. На производительность влияет овердохуища всего:

  • Железо твоё. Если у тебя процессор — хуй с горы, а оперативки — на один чих, то хоть тысячу потоков настрой — они просто будут друг другу мешать, как пьяные мартышки в тесной клетке.
  • Сам этот maxThreads. Это ж не абстрактная цифра, а реальные потоки, которые будут жрать память и процессорное время. Поставишь слишком много — система начнёт больше времени на переключение контекста тратить, чем на работу. Чистый пиздец.
  • Очередь, ёб твою мать (acceptCount). Это сколько запросов могут постоять в приёмной, пока все потоки заняты. Как в поликлинике талоны берут. Настроишь мало — будут отказывать сразу. Настроишь много — запросы будут ждать до второго пришествия, а пользователь уже уйдёт.
  • И что за запросы-то? Если они быстрые, как укол в жопу — одно дело. А если каждый запрос — это тяжёлая аналитика на пять минут, то тут хоть обосрись потоками, очередь всё равно будет.

Так что, чувак, рекомендации ихние — они такие... общие. «Увеличивайте maxThreads до 500-1000». Ага, щас. А память кто даст? Мониторь, говорят, ресурсы. Абсолютно верно! Сначала смотри, как твоё приложение дышит, сколько памяти жрёт на поток, сколько CPU свободного. А потом уже крути ручки. И acceptCount не забудь подкрутить, чтобы не получилось, как у того Герасима — либо всё, либо ничего.