bfe*_*bfe 6 javascript memory-leaks mongoose mongodb node.js
我在 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);
});
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
节点模块:
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
Run Code Online (Sandbox Code Playgroud)
编辑:附加测试因此,让服务器在一夜之间运行可能会为我提供更多的洞察力,或者只是让我更加困惑。
我不确定大约 3 小时内堆的快速增加会发生什么,但是在 10 小时后有一个非常明显的大型垃圾收集似乎可以控制事情。我将重新添加条件以检查连接错误和断开连接/重新连接,以查看这些较大的内存更改是否与这些事件相关或仅归因于垃圾收集器。