未释放资源的教训,开发MongoDB连接一定要关闭连接

本文详细阐述了在使用第三方MongoDB驱动时遇到的连接池满问题,通过深入分析发现是异常处理不当导致驱动未能自动关闭连接。最终通过手动在catch块中关闭连接解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

废不少工夫将数据存储,全部迁移至mongodb,未作大量改动则是主因。

 

但遇到奇怪的现象。

 

程序跑起不久后,mongodb即假死,另起客户端想登陆mongodb都不成。

要重启mongodb服务器才好转。

 

分析原因是mongodb的连接池满掉且不释放。

 

但从官网所了解的mongodb的连接是自行管理的,用完后自动释放,写几个demo测试,也完全符合这一点。

 

浪费了不少时间找这个问题的成因,并想办法作优化。

 

比如,设置windows的TCP连接数等等。

设置mongodb的连接数,等待时间等等。

 

但都没能解决问题

 

最后转念一想,mongodb的连接是自行管理的,有自已的连接池,但mongdb与我开发的程序之前,还有一个第三方,封装的MONGODB驱动。

 

想想驱动内部会不会作了什么事情,以致于连接被长久保持,不能归还?

 


资源型引用都要在finally中释放,因为考虑到重用,所以并未在finally中释放资源

 

抱着试一试的心态,重写了所有的项目代码,try{}catch{} 在catch中手动close释放连接。

 

结果问题不再出现。

 

原因很清楚了,就是因为异常。

 

mongodb的连接顺利的执行完任务,自动释放,但用该驱动,如果出异常的话,并不会主动关掉连接,以至程序运行一段时间后,连接池被透支。

 

转载于:https://www.cnblogs.com/zihunqingxin/p/4049014.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值