Tomcat连接池的maxActive与maxIdle有什么区别?

ams*_*ams 36 tomcat database-connection

tomcat连接池有一个名为maxActive的设置和一个名为maxIdle的设置我的问题是.

  1. 这两个设置有什么区别?
  2. 什么是真实世界的示例场景,您可能具有与maxIdle不同的maxActive值?

出于某种原因,文档对我没有意义.根据http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html上的文档,apache dbcp和tomact 7 jdbc-pool上都存在maxActive和maxIdle

maxActive(int)可以同时从此池分配的最大活动连接数.默认值为100

maxIdle(int)始终应保留在池中的最大连接数.默认值为maxActive:定期检查100个空闲连接(如果已启用),并且将释放空闲时间超过minEvictableIdleTimeMillis的连接.(另见testWhileIdle)

sou*_*ser 33

maxActive很直接.maxIdle可以用这种方式解释 - 假设你有100个最大活动连接,并说你将maxIdle设置为80.假设没有请求进入数据库,将只测试80个连接(通过验证查询)并保持活动状态.其他20个将被关闭.所以在任何时候你都只能有80个空闲连接.
您可能希望将此值设置为不同的数字,以防止其他(不必要的)连接进入数据库.因为数据库服务的每个连接都消耗资源(如内存).
但是,假设您已将maxActive大小设置为100并且几乎所有时间都在使用100,则此设置显然无关紧要.

  • @grep 拥有 maxActive 和 maxIdle 的想法是让池的大小适应负载。maxActive 在负载高时确定池的大小,而 maxIdle 在负载低时限制池的大小 - 为了性能优势。详细解释见/sf/answers/3785993641/ (3认同)
  • 1.你写80个连接时的意思是什么?为什么另外20个关闭?我不明白maxActive有什么好处. (2认同)

Jas*_*key 14

maxActive

the maximum number of active connections that can be allocated from this pool at the same time.  
Run Code Online (Sandbox Code Playgroud)

此属性用于限制池可以打开的连接数.

了maxidle

(int) The maximum number of connections that should be kept in the pool **at all times.** 
Run Code Online (Sandbox Code Playgroud)

这是为了限制空闲连接.不会释放连接(不大于maxIdle的值),以便下一次连接请求会快得多.

总而言之,maxActive是限制最大连接数.

但是空闲(maxIdleminIdle)更多是性能问题(与空间/资源的交换时间),其中,maxIdle是限制您要与之交换时间的最大连接数(资源).


nar*_*yan 11

假设您已将该属性定义为

maxActive = 100
Run Code Online (Sandbox Code Playgroud)

这基本上意味着

Size of the pool = maxActive = 100
Run Code Online (Sandbox Code Playgroud)

只有maxActive 的问题

Size of pool under heavy load = maxActive
Size of pool under no/low load = maxActive
Run Code Online (Sandbox Code Playgroud)

即使没有load( none of the connections are actually in use),100个连接都在消耗资源

您绝对可以将maxActive减少到 80。但是这样做也意味着您将重载(when application is consuming all available connections)期间可用连接的上限也降低到 80。

因此,您坚持使用maxActive作为池的大小

maxIdle如何解决上述问题

假设您已将属性定义为

maxActive = 100
maxIdle = 80
Run Code Online (Sandbox Code Playgroud)

这基本上意味着

Size of pool under heavy load = maxActive = 100
Size of pool under low load = maxIdle = 80
Run Code Online (Sandbox Code Playgroud)

maxIdle为连接池提供了适应负载的灵活性。在高负载 ( number of connections-in use > maxIdle)期间,maxActive是唯一决定连接池大小的属性

但是在空载(number of connections in-use < than maxIdle)期间,maxIdle决定了连接池的大小

因此,正确的 maxIdle 值可确保连接池不会对性能产生不必要的影响。


小智 5

在小环境下,连接数据库不是问题,因为没有那么多连接,服务器资源几乎完好无损。在大环境下,数据库的连接数会消耗大量资源,因此,您需要优化管理数据库连接的方式,使用尽可能少的连接数会给您带来更好的性能。在这一点上,maxActive 设置了该池可以与数据库建立的最大连接数,限制分配给请求者的资源。使用 maxIdle 指定,如果连接“空闲”,它将被关闭,除非有最小的“maxIdle”连接。为什么不小于 maxIdle?,因为您需要一些连接来为对数据库的下一个请求做好准备,所以您不需要'