繁体   English   中英

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

[英]tomcat - ratio between HTTP Connector maxThreads / acceptCount and JDBC pool maxActive

两者之间是否存在常识可接受的比率

  • 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 maxActive是一种常见的做法(但是按照我们的示例,认为100%的最大值太大了-可以说最大20%或50%?),并且说accpetCount更大值,以便在应用程序处理其他HTTP请求时将HTTP请求排队?

这里有一个类似的问题: Tomcat-在Http连接器中配置maxThreads和acceptCount,但没有更精确的答案

首先,一些澄清:

  • 线程之间不共享JDBC连接,以避免违反隔离要求。 如果池耗尽,则请求将在队列中等待,直到分配了连接或发生了超时。
  • 当请求到达maxThreads值时将对其进行处理 ,任何其他请求都将被放入队列中,直到acceptCount值为止。

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

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

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

除非您的应用程序负载如此说,否则将永远无法达到maxThreads ,但是您的数据库池应该能够应付该负载,否则您的应用程序将失败。

在这种情况下,性能的优化与调整数据库连接池和线程池的动态有关,而不是设置限制。 一旦达到极限,就没什么要做的了,要么找到导致运行缓慢的代码,要么扩大规模。

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

希望这可以帮助!

Tomcat 7 HTTP连接器文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM