Apache Tomcat Темы запросов - PullRequest
       9

Apache Tomcat Темы запросов

5 голосов
/ 11 апреля 2011

У нас есть приложение, которое немного теряет память, но немного преуменьшает.

Я использую jvisualvm, чтобы попытаться найти причину проблемы.

Я вижу, что количество потоков значительно возрастает в потоках, начинающихся с имени: http-8080- пример: http: 8080-42

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

Моя проблема в том, что эти потоки работали в течение долгого времени (до 10 минут).

У меня такой вопрос:

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

Ответы [ 3 ]

6 голосов
/ 11 апреля 2011

Tomcat всегда имеет несколько ожидающих потоков HTTP, например, если мы посмотрим на настройку соединителя по умолчанию:

<Connector port="80" maxHttpHeaderSize="8192"
              maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
              enableLookups="false" redirectPort="8443" acceptCount="100"
              connectionTimeout="20000" disableUploadTimeout="true" />

Мы видим, что всегда должно быть не менее 25 потоков, но ожидающих подключения (до ограничения maxThreads). Это контролируется атрибутами min и maxSpareThreads.

Что виртуальная машина JVisual сообщает, что поток ожидает или заблокирован на ресурсе и т. Д. И т. Д.

2 голосов
/ 25 ноября 2014

Проверьте настройки разъема Tomcat.Обратите внимание на maxThreads и другую конфигурацию пула потоков.Распространенной ошибкой является просто увеличение maxThreads без «настройки».Если вы настроите излишне большой пул, это приведет к большому количеству незанятых потоков.Это не принесет пользы.

Несмотря на то, что это очевидно, просто для записи потоки TIMED_WAITING будут иметь тайм-аут, а потоки WAITING будут просто лежать для notify() или notifyAll().

1 голос
/ 11 апреля 2011

Вообще говоря, серверы приложений будут предварительно создавать несколько потоков.Сервер приложений не только создаст их, но и сохранит потоки.Это известно как пул потоков.Сервер примет запрос и отправит его потоку, а когда этот запрос завершится, сервер отправит новый запрос этому потоку.

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

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

Важно знать, что ваш сервер Tomcat не должен создавать новые потоки для каждого запроса (опять же, вообще говоря), он должен повторно использовать потоки.

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