您的位置:首页 > 数据库 > Mongodb

mongodb 连接 不能即时 释放

2016-09-08 17:49 169 查看
MongoDB1.3版本以上都通过MongoClient类进行连接,其策略默认就是长连接,而且无法修改。

所以连接数其实取决于fpm的客户进程数。如果fpm量太大,必然会导致连接数过多的问题。如果你所有机器上一共有1000个fpm,那么就会创建1000个长连接,按mongodb服务端的策略,每个连接最低消耗1M内存,那这1G内存就没了。

所以直接方案是每次使用完后进行close操作,这样不会让服务端需要保持大量的连接。

而close函数也有一个坑,就是默认只关闭写连接(比如master或者replica sets的primary),如果要关闭全部连接,需要添加参数true即:$mongo->close(true)

每次关闭连接的方案可以有效减少服务器的并发连接数,除非你的操作本身非常慢。但是同样也有它的问题,比如每次不能复用之前的tcp连接,需要重新进行连接,这样连接耗时会比较高,特别是用replica sets的时候,需要创建多个tcp连接。

所以最终可能只有两个方案

一是减小fpm的数量

二是自建连接池,通过连接池将之个客户端的连接收敛成固定数量对MongoDB的连接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: