Apache 中 Tomcat 线程池的行为 + Tomcat 部署
Behavior of Tomcat Thread Pool in Apache + Tomcat Deployement
我已经在 3 层设置中部署了一个名为 TPC-W 的流行 Web 应用程序基准测试。我有两个物理节点,一个 运行 Apache Web Server 和另一个 运行 Tomcat + MySQL。我在 Tomcat 中使用了一个共享执行器,我试图了解它的行为。我正在使用 JMX 来监视 Tomcat JVM。
这是我的问题。 Tomcat shared executor MBean 的 completedTaskCount
属性不会根据服务请求数更新(实际上它保持不变为 0)。我可以看到在 GlobalRequestProcessor MBean 的 AJP 连接器下有大量的请求。这是为什么? completedTaskCount
不应随着请求的处理而递增。
我唯一可能的解释是这是因为 AJP 协议中的某些行为。我假设无论出于何种原因,每个 Apache 进程都连接到 Tomcat 执行程序线程池中的一个线程,并将所有传入请求作为单个请求发送到 Apache。甚至任何新的传入请求都作为该请求的一部分发送。在这种情况下,Tomcat 线程将永远不会看到来自 Apache 的请求已得到完全满足。这有意义吗?
非常感谢与此相关的任何指示或帮助。
编辑 1
Tomcat版本:7.0.94
Apache 版本:2.4.38
这是连接器定义:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" executor="tomcatThreadPool"/>
共享执行器定义如下:
<Executor name="tomcatThreadPool" namePrefix="tpcw-exec-" maxThreads="200" minSpareThreads="25"/>
AJP 默认使用 keep-alive 个连接。 BIO 连接在打开时会分配一个线程,并且该线程会一直分配到连接关闭。
使用 keep-alive 连接意味着连接永远不会关闭,因此线程永远不会 returns 到池中,因此执行器永远不会看到已完成的任务。如果您反弹应该关闭打开连接的 httpd 实例之一,您应该看到执行程序上完成的任务计数增加 - 但仅增加连接数,而不是处理请求数,因为每个连接处理许多请求。
我已经在 3 层设置中部署了一个名为 TPC-W 的流行 Web 应用程序基准测试。我有两个物理节点,一个 运行 Apache Web Server 和另一个 运行 Tomcat + MySQL。我在 Tomcat 中使用了一个共享执行器,我试图了解它的行为。我正在使用 JMX 来监视 Tomcat JVM。
这是我的问题。 Tomcat shared executor MBean 的 completedTaskCount
属性不会根据服务请求数更新(实际上它保持不变为 0)。我可以看到在 GlobalRequestProcessor MBean 的 AJP 连接器下有大量的请求。这是为什么? completedTaskCount
不应随着请求的处理而递增。
我唯一可能的解释是这是因为 AJP 协议中的某些行为。我假设无论出于何种原因,每个 Apache 进程都连接到 Tomcat 执行程序线程池中的一个线程,并将所有传入请求作为单个请求发送到 Apache。甚至任何新的传入请求都作为该请求的一部分发送。在这种情况下,Tomcat 线程将永远不会看到来自 Apache 的请求已得到完全满足。这有意义吗?
非常感谢与此相关的任何指示或帮助。
编辑 1
Tomcat版本:7.0.94
Apache 版本:2.4.38
这是连接器定义:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" executor="tomcatThreadPool"/>
共享执行器定义如下:
<Executor name="tomcatThreadPool" namePrefix="tpcw-exec-" maxThreads="200" minSpareThreads="25"/>
AJP 默认使用 keep-alive 个连接。 BIO 连接在打开时会分配一个线程,并且该线程会一直分配到连接关闭。
使用 keep-alive 连接意味着连接永远不会关闭,因此线程永远不会 returns 到池中,因此执行器永远不会看到已完成的任务。如果您反弹应该关闭打开连接的 httpd 实例之一,您应该看到执行程序上完成的任务计数增加 - 但仅增加连接数,而不是处理请求数,因为每个连接处理许多请求。