Java tomcat连接器线程的生命周期是什么?
我想知道tomcat连接器线程如何使用CPU资源和服务请求 在我的应用程序中,我设置了maxThreads=300、MaxKeepAliverRequests=25、minSpareThreads=25 我的理解是(NIO线程)Java tomcat连接器线程的生命周期是什么?,java,multithreading,tomcat,tomcat8,Java,Multithreading,Tomcat,Tomcat8,我想知道tomcat连接器线程如何使用CPU资源和服务请求 在我的应用程序中,我设置了maxThreads=300、MaxKeepAliverRequests=25、minSpareThreads=25 我的理解是(NIO线程) 当连接器线程忙时,这意味着它正在处理连接,如创建连接、接受请求、通过同一连接保持其他即时请求的连接活动以及关闭连接。如果连接接收到“MaxKeepAliverRequests”数量的请求,也可以关闭连接 当连接器线程空闲时,意味着它正在等待连接而不做任何事情。这样的线程
在默认连接器线程池上,似乎无法定义线程的空闲超时 对于默认连接器线程池,我指的是这样的配置(剥离到特定部分):
您可以做什么:您可以创建一个(共享的或特定于连接器的)执行器,该执行器允许配置“maxIdleTime”:
如果定义了多个连接器,它们可以共享同一个执行器,也可以为连接器创建不同的执行器。如何配置“maxKeepAliveThreads”?我在apache文档中找不到它()很久以前,Java的线程池中有一个bug,线程实际上是在一个队列中。每个线程都将从队列的头部提取,并在完成时在尾部替换。这意味着即使负载很轻,所有线程也会持续使用,因为队列中每个线程的优先级都相同。这是15年前的事了,所以它可能已经被修复了,但我记得当时人们对它的声音很大。我注意到Thomas链接到HTTP连接器上的页面(我删除了我的其他评论,但伙计,我真的很讨厌这个名字)。您是在独立模式下运行,还是在使用AJP连接器?还有别的吗?这可能会有所不同。@ThomasKläger的maxKeepAliveRequests。拼写错误
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="300" minSpareThreads="25" />
</Service>
</Server>
<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>