HTTP连接器maxThreads/acceptCount和JDBC池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是示例中的瓶颈,因此超过该数量的请求将等待数据库连接。更确切地说,瓶颈在数据库连接池上。你不会得到停滞的数据库连接,而是线程在等待来自池的连接

也就是说,由于maxActive将施加限制,因此在寻找这些值之间的比率方面没有太大价值maxThreads>=maxActive是显而易见的经验法则。

maxThreads将永远无法访问,除非您的应用程序负载表明是这样,但您的数据库池应该能够处理该负载,否则您的应用将失败。

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

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

希望这能有所帮助!

Tomcat 7 HTTP连接器文档。

相关内容

  • 没有找到相关文章

最新更新