2

我的 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 正在使用执行器,即使它没有被指示。经理只是误报还是我没有正确设置线程池?

4

2 回答 2

7

我的猜测是经理报告了作为连接器定义的一部分设置的值,而不是报告执行者的值。执行者将按预期工作,只是没有在经理中正确报告。

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

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

要检查这是否全部正确,请尝试将maxThreadsexecutor 的值更改为不同的值。您应该看到maxThreadsAJP 连接器保持在 200(因为这是它的默认值)。

于 2010-05-03T22:37:29.990 回答
1

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

于 2017-01-19T12:29:42.517 回答