node.js - Mongodb 初始连接池保持打开状态?

标签 node.js mongodb

目前使用node.js( native MongoDB)驱动程序使用Mongodb,我知道可以设置池连接计数,但无论如何观察到相同的行为。

有问题的代码:

(function init(){
    db.connect("mongodb://localhost/test",function(err, database){

    });
})();

这是来自服务器的日志:

Thu Dec 06 20:19:32 [initandlisten] connection accepted from 127.0.0.1:58663 #6
(1 connection now open)
Thu Dec 06 20:19:32 [initandlisten] connection accepted from 127.0.0.1:58664 #7
(2 connections now open)
Thu Dec 06 20:19:32 [initandlisten] connection accepted from 127.0.0.1:58665 #8
(3 connections now open)
Thu Dec 06 20:19:32 [initandlisten] connection accepted from 127.0.0.1:58666 #9
(4 connections now open)
Thu Dec 06 20:19:32 [initandlisten] connection accepted from 127.0.0.1:58667 #10
 (5 connections now open)
Thu Dec 06 20:19:36 [conn9] end connection 127.0.0.1:58666 (4 connections now op
en)
Thu Dec 06 20:19:36 [conn10] end connection 127.0.0.1:58667 (4 connections now o
pen)
Thu Dec 06 20:19:36 [conn8] end connection 127.0.0.1:58665 (4 connections now op
en)
Thu Dec 06 20:19:36 [conn6] end connection 127.0.0.1:58663 (4 connections now op
en)
Thu Dec 06 20:19:36 [conn7] end connection 127.0.0.1:58664 (4 connections now op
en)

连接显然正在关闭,但当前打开的连接计数不会减少,即使连接正确增加也是如此。预期行为?

PS。请不要回答使用 mongodb 的 Nodejs 包装器。

最佳答案

MongoDB 计数器有问题。数据库正在异步关闭所有连接(多个关闭信号),并且它发生得太快以至于无法跟上更新计数器。浏览 MongoDB 源代码后,您可以看到消息输出与计数器更新相去甚远。

低于类似的输出,但精度高达 1ms,这在我看来更好地说明了问题。

Mon Dec  2 17:42:09.059 [conn675] end connection 127.0.0.1:65198 (9 connections now open)
Mon Dec  2 17:42:09.059 [conn676] end connection 127.0.0.1:65199 (8 connections now open)
Mon Dec  2 17:42:09.059 [conn677] end connection 127.0.0.1:65200 (8 connections now open)
Mon Dec  2 17:42:09.059 [conn678] end connection 127.0.0.1:65201 (7 connections now open)
Mon Dec  2 17:42:09.059 [conn679] end connection 127.0.0.1:65202 (6 connections now open)
Mon Dec  2 17:42:09.059 [conn680] end connection 127.0.0.1:65203 (5 connections now open)
Mon Dec  2 17:42:09.059 [conn681] end connection 127.0.0.1:65204 (4 connections now open)
Mon Dec  2 17:42:09.059 [conn682] end connection 127.0.0.1:65205 (3 connections now open)
Mon Dec  2 17:42:09.059 [conn683] end connection 127.0.0.1:65206 (2 connections now open)
Mon Dec  2 17:42:09.059 [conn684] end connection 127.0.0.1:65207 (2 connections now open)

关于node.js - Mongodb 初始连接池保持打开状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750235/

相关文章:

node.js - 在 Sails js 中调用 REST API

node.js - 停止 webpack 在文件底部添加 script 标签

node.js - 使用 Fluent-ffmpeg 将屏幕截图上传到谷歌云存储桶

node.js - NPM 前缀标志在 Windows 上无法按预期工作

mongodb - 具有多个键的 Mongodb $in 查询

mongodb - 使用 ReactiveMongo 在 MongoDB 中搜索文本

mongodb - 在浏览器 Mongo DB 侧边栏中

ajax - 如何从 Node.js 中的 ajax post 返回错误消息

javascript - Mongoose "find"返回一个空数组

node.js - user.save() 不会在 mongodb 中保存(不执行任何操作)