我看到空闲连接没有被清除。我不确定是什么原因?
INITIALSIZE-10 maxtotal-20 了maxidle-10 minidle-0 minEvictableIdleTimeMillis,30分钟 numTestsPerEvictionRun,60分钟 numTestsPerEvictionRun-20 testOnBorrow真 testWhileIdle真 validationQuery-从双
中选择1从各种来源提供以下是我的理解 与数据源的maxtotal- maxactive连接,在上述情况下为20
maxidle-可以保留在池中的空闲连接数。这些被清扫工除去。在上述情况下,如果连接闲置30分钟,则连接空闲。如果清扫车每60分钟运行一次,检查20个空闲连接并清除空闲连接。超过此值的空闲连接将立即关闭。
上述理解是否正确?
我使用BasicDataSourceMXBean打印统计信息
{ “NumActive”: “0”, “NumIdle”: “10”, “isClosed”: “假”, “maxTotal”: “20”, “了maxidle”: “10”, “MinIdle”:“0 “}
即使没有流量,也不会清除空闲连接。上面的配置有什么问题吗?
还有什么是minIdle,什么时候应该将它设置为非零值?
最近升级的hibernate版本从3.6.0.Final升级到hibernate 4.3.11.Final并从spring spring版本弹到4.2.9。
早些时候,空闲连接被清除了。但是自升级以来,空闲连接没有被清除。答案 0 :(得分:0)
我看过的每个地方,似乎属性应该是testWhileIdle
而不是testOnIdle
。该设置默认为false
,因此您的闲置主题未经过有效性测试,因此无法逐出。
minIdle
基本上告诉连接池允许多少空闲线程。我从文档中了解到,当minIdle
为0
时,应该没有空闲连接。
通常minIdle
默认值与initialSize
相同。
答案 1 :(得分:0)
我看到空闲连接没有被清除。我不确定 原因是什么?
https://commons.apache.org/proper/commons-dbcp/configuration.html
其他人指出的testWhileIdle与testOnIdle问题应解决您的空闲连接保持打开的原因。假设你的initialSize = 10个连接将被60分钟标记处的驱逐清除器清除,以使你达到minIdle = 0,这是正确的。为什么你想要一个minIdle = 0是一个不同的问题?连接池的整个要点就是预先验证,测试和建立你的连接,这样他们就可以坐在你的游泳池里“闲聊”。并且可以使用" Borrow"通过传入请求。这可以通过将执行时间减少到仅仅SQL会话来提高性能。
还有什么是minIdle,什么时候应该将它设置为非零值?
这些空闲连接将预先建立并维护等待您将来的SQL请求。 minIdle大小取决于您的应用程序,但DBCP2的默认值为8,可能不是一个糟糕的起点。我们的想法是保持足够的水平,以满足游泳池的平均需求。当您有突发流量时,您可以设置maxIdle来处理那些高峰时间。您应用的testWhileIdle = true配置将在清扫程序出现时运行validationQuery,但默认情况下每次运行仅测试3个连接。如果要进行更多测试,可以将numTestsPerEvictionRun配置为更高的数字。这些"测试"确保你的关系仍然处于良好状态,这样你就不会抓住“坏”的错误。执行期间从池中空闲连接。
我怀疑你可能更关心"挂"连接而不是"空闲"连接。如果是这种情况,您将需要查看"被遗弃的"旨在破坏" active"的配置运行时间超过X时间的连接。 removeAbandonedOnMaintenance = true以及removeAbandonedTimeout = {numberOfSecondsBeforeEligibleForRemoval}。