猫鼬没有关闭连接

时间:2015-10-22 17:43:22

标签: node.js mongodb mongoose

似乎我的mongoose配置/开发存在问题。 我按如下方式实例化连接:

var con = mongoose.createConnection(baseUri, { server: { poolSize: 1 }, socketOptions: { keepAlive: 0, connectTimeoutMS: 10000 }});

根据我的理解,他们应该在10秒后关闭。我的假设错了吗?使用此编码是否正确(keepAlive:0,connectionTimeoutMS:10000 ??

在mongo日志中,我可以看到连接未关闭:

2015-10-22T19:38:55.250+0200 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:56345 #20 (20 connections now open)
2015-10-22T19:38:55.258+0200 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:56346 #21 (21 connections now open)
2015-10-22T19:38:55.258+0200 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:56347 #22 (22 connections now open)

我希望我的应用程序中有多达2000个并发用户,我只是想阻止mongodb崩溃!

BR, 马丁

1 个答案:

答案 0 :(得分:1)

马丁,

connectionTimeoutMS参数将确定您的驱动程序(Mongoose)等待与服务器建立连接的最长时间。仅在客户端首次连接到数据库时使用。如果关闭应用程序时关闭连接,则行为正常。

如果您担心超时问题,那么对于开发,我会从一个相对较低的超时值开始,如果您面临常规超时,请慢慢增加它。通常,您可以以5秒的超时开始。对于通过诸如Heroku之类的PaaS进行的生产或连接,您可能会考虑更高的超时,因为您的应用程序可能在一个可以“闲置”的容器中运行。或者"钝化"在低活动期间。例如,在此问题上,MongoLab建议将超时设置为30秒。见这里:MongoLab Recommended Mongoose Settings.

如果你有长时间运行的应用程序,你应该启用keepAlive。

如果你的问题是开销,你提到MongoDB与2000个并发用户崩溃,每个与MongoDB的连接都有一个开销,这有助于系统所需的内存。如果您怀疑用户数量很多并且要进行生产质量操作,您希望查看MongoDB Replication,那么开始使用MongoStat之类的监控工具监控正在运行的mongod

可能会有所回报