无法监视接受队列,但您可以使用 Executor 获取 tomcat 的排队请求数。
<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” 表示线程池最多有 20 个工作线程,可以同时处理 20 个请求。
maxQueueSize=“30” 表示线程池最多可以排队 30 个未处理的请求。因此,您可以通过 JMX 监视 queueSize 属性,以获取排队请求的数量。
但默认情况下,线程池队列永远不会包含任何请求,因为 maxConnections 的默认值是 maxThreads 的值,这意味着当所有工作线程都忙时,新请求将在接受队列中排队。
通过设置 maxConnections=“50”,tomcat 可以接受比 maxThreads(20) 更多的请求。在上面的示例中,执行器线程池可以处理 20 个请求,额外的 30 个请求将保留在线程池队列中,任何更多的请求将进一步在接受队列中排队。
因此,现在您可以使用 MBean 'Catalina:type=Executor,name=tomcatThreadPool' 和属性名称 'queueSize' 来监控 threadpool 中排队的请求数。