Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tomcat连接器线程的生命周期是什么?_Java_Multithreading_Tomcat_Tomcat8 - Fatal编程技术网

Java tomcat连接器线程的生命周期是什么?

Java tomcat连接器线程的生命周期是什么?,java,multithreading,tomcat,tomcat8,Java,Multithreading,Tomcat,Tomcat8,我想知道tomcat连接器线程如何使用CPU资源和服务请求 在我的应用程序中,我设置了maxThreads=300、MaxKeepAliverRequests=25、minSpareThreads=25 我的理解是(NIO线程) 当连接器线程忙时,这意味着它正在处理连接,如创建连接、接受请求、通过同一连接保持其他即时请求的连接活动以及关闭连接。如果连接接收到“MaxKeepAliverRequests”数量的请求,也可以关闭连接 当连接器线程空闲时,意味着它正在等待连接而不做任何事情。这样的线程

我想知道tomcat连接器线程如何使用CPU资源和服务请求

在我的应用程序中,我设置了maxThreads=300、MaxKeepAliverRequests=25、minSpareThreads=25

我的理解是(NIO线程)

  • 当连接器线程忙时,这意味着它正在处理连接,如创建连接、接受请求、通过同一连接保持其他即时请求的连接活动以及关闭连接。如果连接接收到“MaxKeepAliverRequests”数量的请求,也可以关闭连接
  • 当连接器线程空闲时,意味着它正在等待连接而不做任何事情。这样的线程在超过多个线程时被终止
  • 当连接器线程正在等待IO或某个应用程序线程给出响应时,它可以接受新的连接
  • 现在,我在查看这些JMX mbeans值时发现:currentThreadCount。它等于282

    这个值是多少??从threadpool中,我看到大量http nio线程正在运行。但这远远不是繁忙线程的数量。见下图。我期望(currentThreadCount~Busy Threads+minSpareThreads),但它离maxThreads很远,而且几乎很近


    在默认连接器线程池上,似乎无法定义线程的空闲超时

    对于默认连接器线程池,我指的是这样的配置(剥离到特定部分):

    
    
    您可以做什么:您可以创建一个(共享的或特定于连接器的)执行器,该执行器允许配置“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>