因此,使用tomcat,您可以设置acceptCount值(默认值为100),这意味着当所有工作线程都忙时 - 新的连接被放入队列中(直到它已满,之后它们被拒绝)。
我想要的是监视此队列中项目的大小 - 但是如果有办法通过JMX获取(即不是队列最大大小 - 只是配置,则无法解决)但是队列中当前的项目数是多少。
任何想法都赞赏。
配置tomcat:http://tomcat.apache.org/tomcat-6.0-doc/config/http.html(搜索“acceptCount”)
答案 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;