zoukankan      html  css  js  c++  java
  • 未释放资源的教训,开发MongoDB连接一定要关闭连接

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

    但遇到奇怪的现象。

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

    要重启mongodb服务器才好转。

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

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

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

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

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

    但都没能解决问题

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

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


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

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

    结果问题不再出现。

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

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

  • 相关阅读:
    ASP.NET MVC简介
    jQuery
    C#webform LinQ
    webform LinQ
    C# WebForm内置对象2+Repeater的Command
    C#WebForm内置对象
    JavaScricp
    Webform 内置对象 Session对象、Application全局对象,ViewState
    Webform 内置对象 Response对象、Request对象,QueryString
    WebForm复杂控件
  • 原文地址:https://www.cnblogs.com/zihunqingxin/p/4049014.html
Copyright © 2011-2022 走看看