使用后的空闲内存[nodejs]

时间:2017-08-14 09:42:37

标签: node.js mongodb mongoose

如果文档包含大量数据,我正在运行测试来检查mongodb上的查询时间。使用的代码是:

var mongoose = require('mongoose');

var testSchema = new mongoose.Schema({
    email       : String,
    password    : String,
    dob         : Date,
    phone       : String,
    misc1       : Array,
    misc2       : Array,
    misc3       : Array,
    misc5       : Array,
    misc6       : Array,
    misc7       : Array,
    misc8       : Array,
    misc9       : Array,
    misc10      : Array,
    misc11      : Array,
    misc12      : Array,
    misc13      : Array,
    misc14      : Array,
    misc15      : Array
});

var Test = mongoose.model('Test', testSchema);

var email = 'someone';
var password = 'very safe password';
var dob = new Date();
var phone = 'this is not a phone number';
var dummyObject = {
    title: 'title',
    story: 'story',
    createdOn: new Date(),
    modifiedOn: new Date(),
    author: 'somebody'
};

var dummyArray = [];

console.log('start creating dummy arrays');

for(var i = 0; i < 5000; i++) {
    dummyArray.push(dummyObject)
}

console.log('dummy arrays created');

var test = new Test({
    email       : email,
    password    : password,
    dob         : dob,
    phone       : phone,
    misc1       : dummyArray,
    misc2       : dummyArray,
    misc3       : dummyArray,
    misc5       : dummyArray,
    misc6       : dummyArray,
    misc7       : dummyArray,
    misc8       : dummyArray,
    misc9       : dummyArray,
    misc10      : dummyArray,
    misc11      : dummyArray,
    misc12      : dummyArray,
    misc13      : dummyArray,
    misc14      : dummyArray
});


module.exports = function () {
    for(var j = 0; j < 200; j++) {
        console.log(j);
        (function (j) {
            test.save(function (err) {
                if (err) {
                    console.log(err);
                } else {
                    console.log(j + 'th record saved')
                }
            })
        })(j)
    }
};

但是当我运行这个功能时,会发生两件我不明白的事情:

  1. 节点进程使用的内存:2.83GB,它没有被释放。
  2. 只保存了199条记录,保存了1 - 199条记录,第0条记录没有记录。
  3. 如果使用较小的j <= 50进行测试,您会注意到"0th record saved"日志确实已打印出来。即便如此,消耗的RAM也不会被释放。

    硬件概述:

    • 型号名称:Mac mini
    • 型号标识符:Macmini7,1
    • 处理器名称:Intel Core i5
    • 处理器速度:2.6 GHz
    • 处理器数量:1
    • 核心总数:2
    • L2缓存(每个核心):256 KB
    • L3缓存:3 MB
    • 内存:8 GB

    我正在使用活动监视器来检查我的节点进程消耗的ram数量。

    更新1:

    对于j = 50,内存(1.22GB)在> 2分钟内获得免费(90MB)。

    1. 我做错了什么?
    2. 如果流程完成后如何释放RAM?

0 个答案:

没有答案