为什么连接器不使用我的Tomcat 6执行程序线程池?

时间:2010-05-03 22:24:05

标签: java tomcat tomcat6 server.xml

我的server.xml如下所示:

<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<Executor  name="tomcatThreadPool" 
           namePrefix="catalina-exec-"
           maxThreads="200" 
           minSpareThreads="4"/>

<Connector executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="10000"
           maxKeepAliveRequests="1"
           redirectPort="8443" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

但是,在Tomcat管理器(http://localhost/manager/status)中,它显示为以下

http-8080: Max threads: -1 Current thread count: -1 Current thread busy: -1
jk-8009: Max threads: 200 Current thread count: 4 Current thread busy: 1

出于某种原因看起来http-8080似乎没有使用执行程序,即使它也被指示并且jk-8009正在使用执行程序,即使它没有被指示。管理员是否只是误报或者我没有正确设置线程池?

2 个答案:

答案 0 :(得分:5)

我的猜测是管理器报告的是作为连接器定义的一部分而设置的值,而不报告执行程序中的值。遗嘱执行人将按预期工作,但在经理中没有正确报告。

AJP连接器的200值在这里有误导性,因为200是maxThreads的默认值(如定义的here);因为您没有为AJP连接器指定maxThreads,所以这是使用的值。

HTTP连接器报告无意义值,因为它将其线程管理委托给执行程序。

要检查是否全部为真,请尝试将执行程序的maxThreads值更改为其他值。您应该看到AJP连接器的maxThreads保持在200(因为这是它的默认值)。

答案 1 :(得分:0)

此连接器要创建的请求处理线程的最大数量,因此确定可以处理的最大并发请求数。如果未指定,则此属性设置为200.如果执行程序与此连接器关联,则忽略此属性,因为连接器将使用执行程序而不是内部线程池执行任务。请注意,如果配置了执行程序,则会正确记录为此属性设置的任何值,但会将其报告(例如通过JMX)为-1,以表明它未被使用。