测量tomcat的排队请求数

时间:2011-03-22 07:49:53

标签: java tomcat jvm

因此,使用tomcat,您可以设置acceptCount值(默认值为100),这意味着当所有工作线程都忙时 - 新的连接被放入队列中(直到它已满,之后它们被拒绝)。

我想要的是监视此队列中项目的大小 - 但是如果有办法通过JMX获取(即不是队列最大大小 - 只是配置,则无法解决)但是队列中当前的项目数是多少。

任何想法都赞赏。

配置tomcat:http://tomcat.apache.org/tomcat-6.0-doc/config/http.html(搜索“acceptCount”)

2 个答案:

答案 0 :(得分:6)

thread on the mailing列表和the reply from Charles表明不存在此类JMX。

  

来自查克的报价:“请注意   接受队列对Tomcat不可见,   因为它是由通讯维护的   操作系统的堆栈。“

     

来自大卫的话:“不幸的是,   因为Tomcat对此一无所知   接受队列中的请求,....“

     
    

是否无法获取此信息(请求中有多少请求     该     接受队列?)出来?

  
     

不,接受队列是完全的   无形。只有comm栈知道   关于它的任何事情,没有   我知道要排队的API   内容 - 因为内容没有   已收到,只有连接   请求。

根据您的真实问题(例如,测量Tomcat尚未开始处理的接受队列中的请求),如果您正在查看“限制解决方案”,请参阅此follow-up on the same thread

答案 1 :(得分:3)

无法监视接受队列,但您可以使用执行程序获取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 =&#34; 20&#34; 表示线程池最多有20名工作人员,可以同时处理20个请求。

maxQueueSize =&#34; 30&#34; 表示线程池最多可排队30个未处理的请求。因此,您可以通过JMX监视queueSize属性以获取排队请求的数量。

但默认情况下,线程池队列永远不会保留任何请求,因为 maxConnections 的默认值是 maxThreads 的值,这意味着所有工作人员都忙,新的请求在接受队列中排队。

通过设置 maxConnections =&#34; 50&#34; ,tomcat可以接受比maxThreads(20)更多的请求。在上面的示例中,Executor线程池可以处理20个请求,额外的30个请求将保留在线程池队列中,进一步的请求将进一步在接受队列中排队。

现在,您可以使用MBean&#39; Catalina来监控在线程池中排队的请求数:type = Executor,name = tomcatThreadPool&#39;和属性名称&#39; queueSize&#39;