Tomcat - 在Http连接器中配置maxThreads和acceptCount

时间:2011-11-16 14:59:16

标签: apache tomcat jdbc tomcat6

我目前使用Tomcat部署了一个应用程序,它通过JDBC与Postgres数据库交互。查询非常昂贵,所以我看到的是由Tomcat或Apache引起的超时(Apache在我的配置中位于Tomcat前面)。我正在尝试将与数据库的连接限制为20-30个并发连接,这样数据库就不会被淹没。我使用\ ..配置完成了这项工作,将maxActive设置为30,将maxIdle设置为20.我还提高了maxWait。

在这种情况下,我限制了数据库的使用,但我希望连接/请求在Tomcat中是POOLED。 Apache可以同时接受250个请求。所以我需要确保Tomcat也能接受这么多,但要适当地处理它们。

Tomcat在 HTTP连接器配置文件中有两个设置:

  • maxThreads - “Http Connector创建的最大请求处理线程数,因此决定了可以处理的最大并发请求数。”
  • acceptCount - “当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。队列已满时收到的任何请求都将被拒绝。”

所以我猜测如果我将maxThreads设置为最大JDBC连接数(30),那么我可以将acceptCount设置为250-30 = 220.

我不太明白在从池中打开的JDBC连接上的WAITING与排队的线程之间的区别...我的想法是排队的线程消耗的周期较少而运行线程,等待JDBC池,将花费周期检查池中的空闲线程......?

3 个答案:

答案 0 :(得分:2)

请注意,HTTP连接器用于传入的HTTP请求,与JDBC无关。您可能希望单独配置JDBC连接池,例如JDBC连接器的connectionProperties: http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

答案 1 :(得分:0)

除非您的应用程序在每个http连接基础上直接连接到数据库的情况下处理请求,否则您应该根据数据库软件设置/可以处理的内容配置JDBC连接池,并将maxthreads配置为什么您的应用程序/硬件可以处理。

答案 2 :(得分:0)

在大多数情况下,保持maxActive值(db连接池)小于maxThreads(即并发线程数)是有意义的。您可以将acceptCount设置为更高的值,具体取决于您在网站中预期的流量以及处理一个请求的速度。