Tomcat连接池的maxActive和maxIdle之间有什么区别?
tomcat连接池有一个名为maxActive的设置和一个名为maxIdle的设置。我的问题是Tomcat连接池的maxActive和maxIdle之间有什么区别?,tomcat,database-connection,Tomcat,Database Connection,tomcat连接池有一个名为maxActive的设置和一个名为maxIdle的设置。我的问题是 这两种设置之间有什么区别 现实世界中的示例场景是什么,其中maxActive的值可能与maxIdle的值不同 由于某种原因,这些文件对我来说毫无意义。根据上的文档,ApacheDBCP和Tomact7JDBC池中都存在maxActive和maxIdle maxActive(int)可以连接的最大活动连接数 同时从该池中分配。默认值为100 maxIdle(int)应保持的最大连接数 任何时候都在游泳
maxActive是直截了当的。maxIdle可以这样解释-假设您有100个最大活动连接,并将maxIdle设置为80。假设没有到数据库的请求,那么将只测试80个连接(通过validationquery)并保持活动状态。其他20个将关闭。因此,在任何时候,您只能有80个空闲连接。
您可能希望将其设置为不同的数字,以防止额外的(不必要的)数据库连接。因为数据库提供的每个连接都会消耗资源(如内存)。
但是,假设您已将maxActive大小设置为100,并且几乎所有100个都在使用中,则此设置显然无关紧要。在小型环境中,与数据库的连接不是问题,因为没有太多连接,服务器资源几乎完好无损。在大型环境中,到数据库的连接数量会消耗大量资源,因此,您需要优化管理数据库连接的方式,使用尽可能少的连接数量将获得更好的性能。在这一点上,maxActive设置该池可以与数据库建立的最大连接数,从而限制分配给请求者的资源。使用maxIdle,您可以指定,如果连接“空闲”,它将被关闭,除非存在最小的“maxIdle”连接。为什么不小于maxIdle?因为您需要一些连接来准备下一个数据库请求,所以如果必须填充池,您不需要再次打开和关闭这么多连接,因此您可以释放大量资源。maxActive 此属性用于限制池可以打开的连接数 maxIdle 这是为了限制空闲连接。连接(不大于maxIdle的值)将不会被释放,因此下一个连接请求将更快 所以一句话,maxActive就是限制最大连接数
但是idle(
maxIdle
或minIdle
)更多的是用于性能问题(与空间/资源交换时间),其中,maxIdle用于限制要与之交换时间的最大连接数(资源)。假设您已将该属性定义为
maxActive = 100
这基本上意味着
Size of the pool = maxActive = 100
仅使用maxActive的问题
即使没有负载(所有连接都没有实际使用
),所有100个连接都在消耗资源
你绝对可以把maxActive减少到80。但这样做也意味着在重载期间(当应用程序消耗所有可用连接时,将可用连接的上限降低到80
因此,您必须使用maxActive作为池的大小
maxIdle如何解决上述问题
假设您已将属性定义为
maxActive = 100
maxIdle = 80
这基本上意味着
Size of pool under heavy load = maxActive = 100
Size of pool under low load = maxIdle = 80
maxIdle为连接池提供了适应负载的灵活性。
在高负载期间(正在使用的连接数>maxIdle
),maxActive是唯一确定连接池大小的属性
但是在空载期间(正在使用的连接数<小于maxIdle
),maxIdle决定连接池的大小
因此,正确的maxIdle值可以确保连接池不会产生不必要的性能影响。1。当你写80个连接将被测试时,你的意思是什么?为什么又有20家关门了?我不明白maxActive有什么好处。当所需连接数超过maxActive值时会发生什么情况?@BiGGZ连接池将等待maxWait
ms。如果在此期间没有连接返回到轮询,它将抛出异常。@grep让maxActive和maxIdle允许使池适应负载。当负载较高时,maxActive确定池的大小,而当负载较低时,maxIdle限制池的大小,以提高性能。有关详细信息,请参阅explanation@BiGGZ正如@(MikeYakovets)提到的,maxWait参数控制池等待连接可用的时间量。这篇文章,是Thrown感谢你们,并接受了回答,澄清了这一刻!现在我有了一些关于如何调整池的知识。如果我将maxActive设置为-1(无限制)并将maxIdle设置为100,是否会有任何负面影响?当有足够的资源请求时,您可能会遇到资源耗尽的问题。如果我将maxActive设置为-1(无限制),是否会有任何负面影响maxIdle为100?@user10098815这意味着,如果使用的连接数少于100,则池中的空闲连接数将不超过100个。
Size of pool under heavy load = maxActive
Size of pool under no/low load = maxActive
maxActive = 100
maxIdle = 80
Size of pool under heavy load = maxActive = 100
Size of pool under low load = maxIdle = 80