2011-11-16 63 views
7

我目前有一个使用Tomcat部署的应用程序,它通过JDBC与Postgres数据库交互。查询是非常昂贵的,所以我看到的是由Tomcat或Apache导致的超时(Apache在我的配置中位于Tomcat的前面)。我试图限制到数据库的连接到20-30个同时连接,这样数据库不会被压垮。我已经使用\ ..配置完成了这项工作,将maxActive设置为30,将maxIdle设置为20.我也碰到了maxWait。Tomcat - 在Http连接器中配置maxThreads和acceptCount

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

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

  • maxThreads - “由HTTP连接器,其中由此确定的同时最大数来创建的请求处理线程最大数可以处理的请求。“
  • acceptCount - “当所有可能的请求处理线程正在使用时,传入连接请求的最大队列长度,队列满时收到的任何请求都将被拒绝。

所以我猜,如果我设置maxThreads到JDBC连接的最大数目(30),那么我可以设置acceptCount以250-30 = 220。

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

+0

我试图衡量其他人使用不同比率的线程的经验:连接。你有你的调整生产值,你是否保持最大tomcat线程与jdbc连接的比率为250:30,如果是这样,你的工作是如何进行的? – ledlogic

回答

0

除非你的应用程序处理在其直接连接到数据库的每个HTTP连接的基础上的事情要求,那么你应根据您的数据库软件设置/可以处理的数量以及您的应用程序/硬件可以处理的最大线程来配置您的JDBC连接池。

0

保持maxActive值(db连接池)小于maxThreads(即并发线程数)在大多数情况下是合理的。您可以将acceptCount设置为较高的值,具体取决于您在网站上期待的流量以及可以处理多快的请求。