Измерение количества запросов в очереди для tomcat
Итак, с помощью tomcat вы можете установить значение acceptCount (по умолчанию - 100), что означает, что все рабочие потоки заняты - новые соединения помещаются в очередь (пока она не будет заполнена, после чего они будут отклонены).
Я хотел бы следить за размером элементов в этой очереди, но не могу работать, если есть способ получить это через JMX (т.е. не то, что размер максимальной очереди - это просто config, но то, что текущее количество элементов находится в очереди).
Любые идеи оценены.
Конфигурация для tomcat: http://tomcat.apache.org/tomcat-6.0-doc/config/http.html (поиск "acceptCount" )
Ответы
Ответ 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'