Подтвердить что ты не робот

Измерение количества запросов в очереди для tomcat

Итак, с помощью tomcat вы можете установить значение acceptCount (по умолчанию - 100), что означает, что все рабочие потоки заняты - новые соединения помещаются в очередь (пока она не будет заполнена, после чего они будут отклонены).

Я хотел бы следить за размером элементов в этой очереди, но не могу работать, если есть способ получить это через JMX (т.е. не то, что размер максимальной очереди - это просто config, но то, что текущее количество элементов находится в очереди).

Любые идеи оценены.

Конфигурация для tomcat: http://tomcat.apache.org/tomcat-6.0-doc/config/http.html (поиск "acceptCount" )

4b9b3361

Ответ 1

Этот поток в списке рассылки и ответ от Charles предполагает, что такой JMX не существует.

Цитата из Чака: "Обратите внимание, что принимающая очередь не видна Tomcat, поскольку он поддерживается комм. стек ОС."

Цитата Дэвида: "К сожалению, поскольку Tomcat ничего не знает о запросы в очереди приема,...."

Нет ли способа получить эту информацию (сколько запросов в      принять очередь?) out?

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

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

Ответ 2

Очередь приема не может контролироваться, но вы можете получить количество запросов в очереди для tomcat с помощью Executor.

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="20" minSpareThreads="10" maxQueueSize="30" />
<Connector port="8080" protocol="HTTP/1.1" executor="tomcatThreadPool" connectionTimeout="20000" redirectPort="8443" maxConnections="50" />

Конфигурация maxThreads = "20" означает, что в threadpool не более 20 человек, может обрабатывать 20 запросов одновременно.

maxQueueSize = "30" означает, что threadpool может поставить в очередь не более 30 необработанных запросов. Таким образом, вы можете отслеживать атрибут queueSize через JMX, чтобы получить количество запросов в очереди.

Но по умолчанию очередь threadpool никогда не будет содержать никаких запросов, потому что значение по умолчанию maxConnections - это значение maxThreads, что означает, что все рабочие заняты, новые запросы помещаются в очередь ожидания.

Установив maxConnections = "50" , tomcat может принимать больше запросов, чем maxThreads (20). В приведенном выше примере поток threader Executor может обрабатывать 20 запросов, дополнительные 30 запросов будут храниться в очереди threadpool, и все остальные запросы будут очереди в очереди приема.

Итак, теперь вы можете контролировать количество запросов, поставленных в очередь в threadpool, используя MBean 'Catalina: type = Executor, name = tomcatThreadPool' и имя атрибута 'queueSize'