Перейти к основному содержимому

Настройка пулов потоков для веб-серверов Java

· 3 мин. чтения

1. Введение

В этом руководстве мы рассмотрим настройку пула потоков для серверов веб-приложений Java, таких как Apache Tomcat, Glassfish Server и Oracle Weblogic.

2. Пулы серверных потоков

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

В отличие от потоков приложений серверные потоки существуют даже после остановки развернутого приложения.

3. Апач Томкэт

Во-первых, мы можем настроить пул потоков сервера Tomcat с помощью класса конфигурации Executor в нашем server.xml :

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="25"/>

minSpareThreads — наименьший размер пула, в том числе при запуске. maxThreads — это максимальный размер пула до того, как сервер начнет ставить запросы в очередь.

Tomcat по умолчанию устанавливает их равными 25 и 200 соответственно. В этой конфигурации мы сделали пул потоков немного меньше, чем по умолчанию.

3.1. Встроенный кот

Точно так же мы можем изменить встроенный сервер Tomcat для Spring Boot, чтобы настроить пул потоков, установив свойство приложения:

server.tomcat.max-threads=250

Начиная с Boot 2.3, это свойство изменилось на:

server.tomcat.threads.max=250

4. Стеклянная рыба

Далее давайте обновим наш сервер Glassfish.

Glassfish использует команду администратора, в отличие от XML-файла конфигурации Tomcat, server.xml. Из подсказки запускаем:

create-threadpool

Мы можем добавить в create-threadpool флаги maxthreadpoolsize и minthreadpoolsize. Они функционируют аналогично Tomcat minSpareThreads и maxThreads :

--maxthreadpoolsize 250 --minthreadpoolsize 25

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

--idletimeout=2

И затем мы указываем имя нашего пула потоков в конце:

asadmin> create-threadpool --maxthreadpoolsize 250 --minthreadpoolsize 25 --idletimeout=2 threadpool-1

5. Веблогика

Oracle Weblogic дает нам возможность изменять самонастраивающийся пул потоков с помощью WorkManager.

Подобно очередям потоков, WorkManager управляет пулом потоков как очередью. Однако WorkManager добавляет динамические потоки на основе пропускной способности в реальном времени. Weblogic регулярно выполняет анализ пропускной способности, чтобы оптимизировать использование потоков.

Что это значит для нас? Это означает, что, хотя мы можем изменить пул потоков, веб-сервер в конечном итоге решит, создавать ли новые потоки.

Мы можем настроить наш пул потоков в консоли администратора Weblogic:

./fb7accc01511f863fd80dbb968a1deea.jpg

Обновление значений минимального размера пула потоков для самонастройки и максимального размера пула для самонастройки потоков устанавливает минимальные и максимальные границы для WorkManagers.

Обратите внимание на значения Максимальное время зависания потока и Интервал таймера зависания потока. Они помогают WorkManager классифицировать зависшие потоки.

Иногда длительный процесс может привести к накоплению застрявших потоков. WorkManager создаст новые потоки из пула потоков для компенсации. Любое обновление этих значений может увеличить время, необходимое для завершения процесса.

Застрявшие потоки могут указывать на проблемы с кодом, поэтому всегда лучше устранять основную причину, а не использовать обходной путь.

6. Заключение

В этой быстрой статье мы рассмотрели несколько способов настройки пулов потоков сервера приложений.

Хотя существуют различия в том, как серверы приложений управляют различными пулами потоков, они настраиваются с использованием схожих концепций.

Наконец, давайте помнить, что изменение значений конфигурации для веб-серверов не является подходящим исправлением для неэффективного кода и плохого дизайна приложений.