tomcat 连接器线程的生命周期是多少?
What is the life cycle of a tomcat connector thread?
我想知道 tomcat 连接器线程如何使用 CPU 资源和服务请求。
在我的应用程序中,我设置了 maxThreads=300、maxKeepAliveRequests=25、minSpareThreads=25。
我的理解是(NIO线程)
- 当一个连接器线程繁忙时,这意味着它正在处理一个连接,例如创建连接、接受请求、通过同一连接为其他即时请求保持连接以及关闭连接。如果连接收到“maxKeepAliveRequests”个请求,也可以关闭它。
- 当连接器线程空闲时,这意味着它正在等待连接并且什么都不做。此类线程在超过 minSpareThreads 时被杀死?
- 当连接器线程正在等待 IO 之类的东西或等待某个应用程序线程给出响应时,它可以接受新连接。
现在,我正在查看这些 JMX mbean 值并发现:currentThreadCount.It 等于 282。
这个值是多少??从线程池中,我看到这么多的 http-nio 线程是 运行。但与繁忙的线程数相去甚远。请参见下图。我预计 (currentThreadCount ~ Busy Threads + minSpareThreads),但它离 maxThreads
很远而且几乎接近
您似乎无法在默认连接器线程池上为线程定义空闲超时。
对于默认连接器线程池,我的意思是这样的配置(剥离到特定部分):
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="300" minSpareThreads="25" />
</Service>
</Server>
您可以做什么:您可以创建一个(共享的或特定于连接器的)执行器,允许配置“maxIdleTime”:
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="300" minSpareThreads="25" maxIdleTime="60000" />
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
executor="tomcatThreadPool" />
</Service>
</Server>
如果您定义了多个连接器,它们可以共享同一个执行器,或者您可以为连接器创建不同的执行器。
我想知道 tomcat 连接器线程如何使用 CPU 资源和服务请求。
在我的应用程序中,我设置了 maxThreads=300、maxKeepAliveRequests=25、minSpareThreads=25。
我的理解是(NIO线程)
- 当一个连接器线程繁忙时,这意味着它正在处理一个连接,例如创建连接、接受请求、通过同一连接为其他即时请求保持连接以及关闭连接。如果连接收到“maxKeepAliveRequests”个请求,也可以关闭它。
- 当连接器线程空闲时,这意味着它正在等待连接并且什么都不做。此类线程在超过 minSpareThreads 时被杀死?
- 当连接器线程正在等待 IO 之类的东西或等待某个应用程序线程给出响应时,它可以接受新连接。
现在,我正在查看这些 JMX mbean 值并发现:currentThreadCount.It 等于 282。
这个值是多少??从线程池中,我看到这么多的 http-nio 线程是 运行。但与繁忙的线程数相去甚远。请参见下图。我预计 (currentThreadCount ~ Busy Threads + minSpareThreads),但它离 maxThreads
很远而且几乎接近您似乎无法在默认连接器线程池上为线程定义空闲超时。
对于默认连接器线程池,我的意思是这样的配置(剥离到特定部分):
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="300" minSpareThreads="25" />
</Service>
</Server>
您可以做什么:您可以创建一个(共享的或特定于连接器的)执行器,允许配置“maxIdleTime”:
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="300" minSpareThreads="25" maxIdleTime="60000" />
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
executor="tomcatThreadPool" />
</Service>
</Server>
如果您定义了多个连接器,它们可以共享同一个执行器,或者您可以为连接器创建不同的执行器。