Node.js:如何从内存中释放 Mongoose 模型? (内存泄漏)

标签 node.js memory-leaks mongoose garbage-collection

模型访问后如何从内存中释放?我正在使用带有 --expose-gc 选项的 global.gc() 来查看这是否正在占用我的内存。

以下代码创建 10000 个集合:

// mongoose connection
var db = mongoose.createConnection(...);

// amount of collections
var amount = 10000;

// create collections (100/per second)
var sync = async.queue(function(n, cb) {
    var schema = new mongoose.Schema({
        data: mongoose.Schema.Types.Mixed
    });
    var collection = 'model_'+n;
    var model = db.model(collection, schema);
    setTimeout(function() { cb(); }, 10);
}, 1);

// push to queue
for(var i=0; i<amount; i++) {
    sync.push(i);
}

// done
sync.drain = function(err) {
    console.log('all '+amount+' models done');
};

// garbage collector (every second)
setInterval(function() {
    try { global.gc(); } catch(gcerr) { }
}, 1000);

内存使用量随着集合的创建而增加,并且内存永远不会被释放:

1 - Memory used: 30 MB
2 - Memory used: 36 MB
3 - Memory used: 42 MB
4 - Memory used: 48 MB
5 - Memory used: 54 MB
6 - Memory used: 61 MB
7 - Memory used: 65 MB
8 - Memory used: 71 MB
9 - Memory used: 77 MB
10 - Memory used: 82 MB
all 10000 models done
11 - Memory used: 86 MB
12 - Memory used: 86 MB

关于如何在不关闭连接的情况下手动清除内存中的模型有什么想法吗?

找到解决方案

delete db.models[collection];
delete db.collections[collection];
delete db.base.modelSchemas[collection];

最佳答案

Mongoose 通过 mongoose 或连接的属性(取决于您用来声明模型的方式)公开模型和模式缓存:

[mongoose or connection ].models//一个对象

[mongoose or connection ].modelSchemas//一个对象

每个都是一个对象,使用声明的模型名称作为属性名称。然后你可以 delete每个模型,如果你想手动垃圾收集它们。

关于Node.js:如何从内存中释放 Mongoose 模型? (内存泄漏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29624507/

相关文章:

使用集群的 Node.js 性能

node.js - 如何在node.js中向pbcopy输入正确的编码?

使用 FileReader 和 Promise 时的 JavaScript 内存泄漏

node.js - 使用 Mongoose 保存身份验证凭据时出现问题

node.js - MongoError : Invalid Operation, 没有批量插入操作

ios - 将 S3 对象上传到数据库的正确过程是什么

node.js - 如何使用 Node.js 和 Knex 连接到 AWS EC2 实例内的 postgresql 数据库

javascript - NodeJS- fatal error : CALL_AND_RETRY_LAST Allocation failed

c# - Unity table 游AI导致内存泄露

node.js - Mongoose : associate a . 项目(聚合)与 .find().limit().sort() 等