开发MongoDB连接一定要关闭连接,异常中也一定要关

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

但遇到奇怪的现象。

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

要重启mongodb服务器才好转。

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

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

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

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

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

但都没能解决问题

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

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

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

结果问题不再出现。

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

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

时间: 2024-08-04 19:02:53

开发MongoDB连接一定要关闭连接,异常中也一定要关的相关文章

Mybatis 打开连接池和关闭连接池性能对比

1  创建数据库表 -- phpMyAdmin SQL Dump -- version 4.2.11 -- http://www.phpmyadmin.net -- -- Host: localhost -- Generation Time: 2016-08-02 18:13:50 -- 服务器版本: 5.6.21 -- PHP Version: 5.6.3 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+0

java连接oracle数据库,关闭连接出现异常:java.sql.SQLRecoverableException: IO Error: Connection reset

java.sql.SQLRecoverableException: IO Error: Connection reset at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:612) at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:5094) at com.sms.send.StartTaskNew.run(SmsSend.java

连接池(理论上应该是任意连接池) 、spring方法切入、 mybatis 、 redis等待请求 用了mysql连接的方法阻塞超过8小时导致mysql关闭连接 应用复活后用了已关闭连接而异常

服务进程中的服务方法blpop阻塞在redis队列下(等待请求),  使用方(客户代码)向该队列push请求以促使服务方法在阻塞的代码行继续运行下去. 服务方法使用了mybatis的SqlSessionTemplate, 在进入服务方法时spring为mybatis调用了连接池druid的getConnection, 假设很久没有请求来,一直阻塞在blpop处,直到mysql的wait_timeout默认8小时到达(导致mysql实际上已经关闭了该连接), 而此时处在方法内部, 一旦有请求来,代

WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

原文:WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭 在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而由于WCF服务的特殊性,调试起来也不是那么方便,因此往往会花费不少时间来进行跟踪处理.本文介绍我在我在我的框架里面使用WCF服务的时候,出现的一个常见错误的处理方法,它的提示信息是:基础连接已经关闭: 连接被意外关闭.这种情况我碰到的有两种,一种是返回DataTable的时候出现的,一种是返回实体类

mongodb系列3 mongo mongoskin 连接以及连接数的问题进阶

1)使用mongodb连接mongo var mongo = require('mongodb'), //引入mongodb dbHost = '127.0.0.1', dbPort = 27017;//配置基本的信息 var Db = mongo.Db; var Connection = mongo.Connection; var Server = mongo.Server; var db = new Db ('local', new Server(dbHost, dbPort), {safe

iOS蓝牙开发(上)基础以及连接外设的实现

蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0设备因为低耗电,所以也叫做BLE peripheral,central == 外设和中心,发起连接的时central,被连接的设备为perilheral service and characteristic === 服务和特征 每个设备会提供服务和特征,类似于服务端的api,但是机构不同.每个外设会

crawler_http关闭连接

1:ps aux|grep Spider4Test.jar 查看端口 2: lsof  -p [端口号] 在爬虫运行期间如果看到 大量的 TIME_WAIT  WAIT_CLOSE 说明请求关闭阻塞[采用httpclient默认方法 ,其实没有关闭掉,需要跑等3分钟 才会关闭] 大量并发时   会有阻塞 3: 解决方法 最简单方法[方法四: 代码实现很简单,所有代码就和最上面的事例代码一样.只需要在HttpMethod method = new GetMethod("http://www.apa

关闭连接:本质是取消 Channel 在 Selelctor 的注册

关闭连接:本质是取消 Channel 在 Selelctor 的注册 目录 关闭连接:本质是取消 Channel 在 Selelctor 的注册 1. 主线分析 1.1 主线 1.2 知识点 2. 源码分析 2.1 read 2.2 close Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 1. 主线分析 1.1 主线 关闭连接分两种:主动关闭(正常关闭)和被动关闭(异常关闭). 多路复用器(Selector)接收到

【HTTP】如何正常关闭连接

参考:<HTTP权威指南> 所有HTTP客户端.服务器或者代理都可以任意时刻关闭一条TCP传输连接.但是服务器永远无法确定它关闭"空闲"连接的那一刻,在线路那一头的客户端有没有数据要发送. 每条HTTP响应都应该有精确的Content-Length首部,用来描述响应主体的尺寸.如果老的HTTP服务器省略了Content-Length或者包含错误的长度指示,这样就要依赖服务器发出连接关闭来说明数据的真实末尾. 如果一个事务,不管是执行一次还是很多次,得到的结果都相同,这个事务