为什么连接器未使用我的Tomcat 6执行器线程池?
-
02-10-2019 - |
题
我的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/状态)表明以下
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也没有指向HTTP-8080,即使没有指示JK-8009,JK-8009也正在使用执行程序。经理是否只是错误地报告,还是我没有正确设置线程池?
解决方案
我的猜测是,经理正在报告设置为连接器定义一部分的值,而不是从执行者报告的值。执行人将按照预期的方式工作,只是在经理中没有正确报告。
AJP连接器的200个值在这里具有误导性,因为200是200 maxThreads
(如定义 这里);因为您没有指定 maxThreads
对于AJP连接器,这是使用的值。
HTTP连接器正在报告胡说八道,因为它将其线程管理委派给了执行程序。
要检查这是否是真的,请尝试更改 maxThreads
执行人的价值为不同的值。你应该看 maxThreads
AJP连接器保持在200(因为那是其默认值)。
其他提示
该连接器要创建的最大请求处理线程数,因此确定了可以处理的同时请求的最大数量。如果未指定,则此属性设置为200。如果执行程序与此连接器关联,则该属性被忽略,因为连接器将使用执行程序而不是内部线程池执行任务。请注意,如果将执行程序配置为该属性的任何值设置,则将正确记录,但将报告(例如,JMX)为-1,以明确说明未使用它。
不隶属于 StackOverflow