【发布时间】:2011-12-30 12:33:36
【问题描述】:
我目前有一个使用 Tomcat 部署的应用程序,它通过 JDBC 与 Postgres 数据库交互。查询非常昂贵,所以我看到的是由 Tomcat 或 Apache 引起的超时(在我的配置中,Apache 位于 Tomcat 前面)。我试图将与数据库的连接限制为 20-30 个同时连接,以免数据库不堪重负。我已经使用 \.. 配置完成了这项工作,将 maxActive 设置为 30,将 maxIdle 设置为 20。我还提高了 maxWait。
在这种情况下,我限制了数据库的使用,但我希望连接/请求在 Tomcat 中成为 POOLED。 Apache 可以同时接受 250 个请求。所以我需要确保 Tomcat 也能接受这么多,但要妥善处理。
Tomcat 在 HTTP 连接器 配置文件中有两个设置:
- maxThreads - “由 Http 连接器创建的请求处理线程的最大数量,因此决定了可以处理的同时请求的最大数量。”
- acceptCount - “当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。当队列已满时收到的任何请求都将被拒绝。”
所以我猜如果我将 maxThreads 设置为最大 JDBC 连接数(30),那么我可以将 acceptCount 设置为 250-30 = 220。
我不太明白等待 JDBC 连接从池中打开的线程与排队的线程之间的区别......我的想法是排队线程消耗的周期更少,而正在运行的线程,在 JDBC 池上等待,将花费周期检查池中是否有空闲线程...?
【问题讨论】:
-
我正在尝试使用不同比例的线程来衡量其他人的体验:连接。您是否有调整过的生产值,是否将最大 tomcat 线程与 jdbc 连接的比率保持在 250:30,如果有,这对您有何帮助?
标签: apache tomcat jdbc tomcat6