我有3个正在运行的副本集,并且我还在使用集群模块分叉3个其他进程(创建的副本集数量,与派生的进程数量无关)。在猫鼬connect
方法中,我设置了以下选项
"use strict";
const mongoose = require("mongoose");
const config = require("../config.js");
// Set up mongoose connection
mongoose.connect( config.mongoURI, {
useNewUrlParser: true,
// silent deprecation warning
useCreateIndex: true,
// auto reconnect to db
autoReconnect: true,
// turn off buffering, and fail immidiately mongodb disconnects
bufferMaxEntries: 0,
bufferCommands: false,
keepAlive: true,
keepAliveInitialDelay: 450000,
// number of socket connection to keep open
poolSize: 1000
}, error => {
if (error) {
console.log(error);
}
});
module.exports = mongoose.connection;
以上代码位于名为db.js
的文件中。在启动快速应用程序的server.js中,我需要db.js
。
每当我多次重新加载网页时,都达到了某个目的,即应用程序的加载速度大大降低了(所有这些都在我决定使用副本集时开始发生)。我通过mongo shell连接到mongdb并在每次重新加载页面db.serverStatus().connections
时都运行current
(这是每次对mongodb进行新连接时都期望的值),但是问题是每当当前字段到达指定的poolSize
时,应用程序需要花费很多时间来加载。每当尝试在db.disconnect()
表达对象上发出end
事件时,我都尝试调用req
,它将与mongodb断开连接(这按预期工作,但是由于我使用流,因此上述解决方案将关闭打开的连接将引发MongoError: Topology was destroyed
。引发的错误不是问题,问题在于如果当前打开的连接达到指定的poolSize,则阻止应用程序急剧降低速度。
我还尝试在mongodb连接字符串中设置maxIdleTimeMS
,但它不起作用(也许mongoose不支持它)
注意::每当我运行db.currentOps()
时,所有活动连接都设置为false
答案 0 :(得分:0)
我实际上已经找到了造成此问题的原因。由于我在应用程序中大量使用更改流,因此创建的更改流数量越多,所需的poolSize数量也就越高。在mongodb jira平台的CORE SERVER板上也已经报告了此问题