tomcat-HTTP连接器maxThreads / acceptCount与JDBC池maxActive之间的比率

时间:2018-11-06 16:22:37

标签: java tomcat httpconnection jdbc-pool

之间是否存在常识可接受的比率
  • HTTP连接器 maxThreads (处理用户请求的最大HTTP线程),
  • HTTP连接器 acceptCount (在使用所有可能的请求处理线程时,传入连接请求的最大队列长度)
  • 数据库池 maxActive (池中的最大数据库连接)配置属性

当使用tomcat的Web基础应用程序占用大量数据库资源时?

我的意思是,例如,我们几乎每个HTTP请求连接都在密集使用数据库。因此,例如,配置更少的DP池 maxActive (例如100),而HTTP连接器 maxThreads (例如200)要大两倍。 这样就有可能在HTTP连接之间共享一个同一个DB连接。这可能会导致大量的数据库使用 / 数据库停止连接

我知道在大多数情况下,Web HTTP请求配置与数据库池配置无关,但是是否存在常见的情况/做法来确定属性之间的比率(maxThreads / acceptCount maxActive)?例如。通常,HTTP maxThreads大于DB maxActives(但是根据我们的示例,认为100%太大是太大了-可以说最大20%或50%?),并且说accpetCount的值更大,以便在应用程序处理其他HTTP请求时将HTTP请求排队?

这里有类似的问题:Tomcat - Configuring maxThreads and acceptCount in Http connector,但没有更精确的答案

1 个答案:

答案 0 :(得分:1)

首先,一些说明:

    线程之间不共享
  • JDBC连接,以避免违反隔离要求。如果池已用尽,则请求将在队列中等待,直到分配了连接或发生了超时。
  • 当请求到达时达到 maxThreads 值时,将为它们提供服务,任何其他请求都将在达到 acceptCount 值的队列中。
  

acceptCount :当所有可能的请求处理线程都在使用中时,传入连接请求的最大队列长度

  • maxActive 是示例中的瓶颈,因此超出该数目的请求将等待数据库连接。更准确地说,瓶颈在数据库连接池上。您不会陷入停滞的数据库连接,而是线程正在等待来自池的连接。

也就是说,找到这些值之间的比率没有太大价值,因为 maxActive 会施加限制。 maxThreads> = maxActive 是明显的经验法则。

除非您的应用程序负载如此表示,否则将永远无法达到

maxThreads ,但是您的数据库池应该能够应对该负载,否则您的应用程序将失败。

在这种情况下,调整性能更多的是关于调整数据库连接池和线程池的动态,而不是设置限制。一旦达到极限,就没什么要做的了,要么查找导致运行缓慢的代码,要么向上扩展。

池动态是指最小的空闲conn /线程,保持空闲多长时间,一次在池中创建多少个新条目等。

希望这会有所帮助!

Tomcat 7 HTTP connector docs