【问题标题】:Tomcat - Configuring maxThreads and acceptCount in Http connectorTomcat - 在 Http 连接器中配置 maxThreads 和 acceptCount
【发布时间】: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 连接器 配置文件中有两个设置:

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

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

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

【问题讨论】:

  • 我正在尝试使用不同比例的线程来衡量其他人的体验:连接。您是否有调整过的生产值,是否将最大 tomcat 线程与 jdbc 连接的比率保持在 250:30,如果有,这对您有何帮助?

标签: apache tomcat jdbc tomcat6


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    除非您的应用程序处理请求是基于每个 http 连接直接连接到数据库,否则您应该根据您的数据库软件设置/可以处理的内容以及您的 maxthreads 来配置您的 JDBC 连接池您的应用程序/硬件可以处理。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-04-10
        • 2012-01-18
        • 2018-10-09
        • 2016-10-27
        • 2014-08-31
        • 1970-01-01
        • 1970-01-01
        • 2020-03-09
        • 1970-01-01
        相关资源
        最近更新 更多