我在处理node.js内存泄漏时遇到了一些麻烦,并一直跟踪到下面包含的最少代码。 它仅使用本机node.js驱动程序连接到MongoDB复制集(使用Mongoose也具有相同的行为)。 随着时间的推移,使用的堆会增加(使用下面的HeapDump模块进行跟踪)。垃圾回收似乎并没有清除所有内容,并且增加了,如下所示。
您认为这是与MongoDB本机驱动程序相关的内存泄漏,还是其他原因?
注意:我尝试使用promise而不使用没有差别的回调,并且我还查找了任何连接错误和断开连接,并且从未发现任何问题。
// Simplest mongoDB connection app
const MongoClient = require('mongodb').MongoClient;
const db_name = 'proto2'; // 'dev'; 'proto2'
let _db;
require('./HeapDump').init();
// connect to mongoDB database
MongoClient.connect('mongodb://host1,host2,host3/?replicaSet=replSet1', {useNewUrlParser: true}, (err, database) => {
console.log('Connected to db ' + db_name);
_db = database.db(db_name);
});
HeapDump模块就是这样:
module.exports.init = function () {
setInterval(tickHeapDump, 2000);
};
function tickHeapDump() {
setImmediate(function () {
heapDump();
});
}
function heapDump() {
let mem = process.memoryUsage();
console.log('Current memory usage: %j', mem);
}
节点模块:
npm list --depth=0
├── clusterize.js@0.18.1
├── console-stamp@0.2.6
├── express@4.16.3
├── jquery@3.3.1
├── ldapjs@1.0.2
├── mongodb@3.1.6
├── mongoose@5.3.0
├── socket.io@2.1.1
├── utf8@3.0.0
└── v8-profiler@5.7.0
编辑:附加测试 因此,让服务器通宵运行可能为我提供了更多的见解,或者进一步使我感到困惑。
我不确定3个小时左右堆快速增加后会发生什么,但是仅在10小时之后就出现了一个非常明显的大型垃圾回收,似乎可以控制一切。我将添加条件以检查连接错误并断开连接/重新连接,以查看这些较大的内存更改是否与这些事件有关或仅归因于垃圾收集器。