1.开启多个线程同时获取Connection和关闭Connection(10-30个线程)
2.重复多次后,有机率出现Connection数组内部连接重复情况
3.出现问题后DataSource的ActiveCount数也会有异常,连接都断开了,ActiveCount还会有值,重复跑下去ActiveCount都会超过MaxActive, 但createCount和poolingCount值就没有增加。
4.使用的durid版本是1.1.22版本
5.以下是dump下来的connections数组情况
原提问者GitHub用户chenyangcun
看起来是在多线程环境下使用了共享的 Connection 数组,导致多个线程同时获取和关闭 Connection,从而导致 Connection 的重复使用和异常。
使用Druid连接池时遇到了一些问题。多个线程同时获取和关闭连接时可能导致连接数组内部连接重复,并且在出现问题后,连接池的ActiveCount数异常,连接没有正确关闭,导致ActiveCount超过了MaxActive的限制。
在minEvictableIdleTimeMillis小于keepAliveBetweenTimeMillis时,连接池中可能会保留多个相同的连接,导致获取连接时拿到同一个连接。 可以参考 https://github.com/alibaba/druid/issues/4316
原回答者GitHub用户tain198127
根据您提供的信息,出现连接重复的问题可能是由于并发环境下多个线程同时获取和关闭 Connection 导致的。这种情况下,可能会发生竞争条件,其中一个线程在另一个线程关闭连接之前重新获取了相同的连接。
另外,您还提到在出现问题后 DataSource 的 ActiveCount 数也会异常。这可能是因为连接没有正确关闭,导致连接池中的连接计数器没有相应地减少。
要解决这个问题,可以考虑以下几点:
确保在多线程环境下使用连接时进行适当的同步控制,以避免竞争条件。可以使用 synchronized 关键字或其他类似的机制来确保一次只有一个线程访问连接。
确保在每个线程使用完连接后都正确关闭连接,以释放资源并更新连接池的计数器。可以使用 try-with-resources 或手动关闭连接来确保连接被正确关闭。
检查您使用的 Druid 版本是否存在已知的连接重复问题。如果有,请尝试升级到最新版本的 Druid,看是否解决了该问题。
如果问题仍然存在,您可以尝试使用其他连接池实现来替代 Druid 进行测试,以确定是否与连接池本身有关。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。