一尘不染

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

tomcat

我的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也正在使用执行器。管理器只是误报还是我没有正确设置线程池?


阅读 216

收藏
2020-06-16

共1个答案

一尘不染

我的猜测是,管理器正在报告作为连接器定义的一部分设置的值,而不报告来自执行器的值。执行者会按预期工作,只是在管理器中未正确报告。

用于AJP连接的200值是误导这里,由于200是作为默认值maxThreads(如定义在这里);
因为您未指定maxThreadsAJP连接器,所以使用的是该值。

HTTP连接器正在报告废话值,因为它将线程管理委托给执行程序。

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

2020-06-16