Tomcat: как ограничить количество потоков (не запросов) во всем приложении? - PullRequest
0 голосов
/ 03 марта 2020

По этой ссылке :

server.tomcat.max-threads - Максимальное количество рабочих потоков на сервере при максимальной загрузке. Другими словами, максимальное количество одновременных запросов, которые могут быть обработаны.

Предположим, что каждый запрос, который получает сервер tomcat, порождает 3 рабочих потока для чтения из базы данных. Это означает, что для 5 запросов у нас есть 20 потоков (каждый запрос имеет 1 поток и 3 дополнительных рабочих потока). В этом случае мы считаем число потоков 20 или 5 для работы со свойством server.tomcat.max-threads?

1 Ответ

1 голос
/ 03 марта 2020

Способ ограничить количество потоков - не создавать их напрямую.

Вместо этого используйте пул потоков с фиксированной верхней границей количества потоков.

Современный способ сделать это - использовать ExecutorService API ( javado c) и создать экземпляр службы, используя либо Executors.newFixedThreadPool(...) ( javado c*) 1010 *) или напрямую, используя одну из множества ThreadPoolExecutor ( javado c) перегрузок конструктора.


В этом случае мы рассматриваем количество потоков значение 20 или 5 для работы со свойством server.tomcat.max-threads?

Потоки, созданные приложением или пулом потоков приложения при обработке запроса, не считаются «рабочими потоками» для целей этого свойства конфигурации Tomcat.

Приложение или его пул потоков могут управлять любыми потоками, которые оно создает, и обеспечивать:

  • количество этих потоков не становится слишком большим,
  • они не потребляют слишком много ресурсов (процессор, память и т. Д. c), а
  • они не становятся «осиротевшими» и в итоге тратят ресурсы на задачу, которая больше не нужна; например, из-за истечения времени ожидания исходного запроса клиента.

Помните, что подобные вещи могут легко превратиться в проблему отказа в обслуживании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...