mongoose多次查询,nodejs占用内存一直在涨
发布于 11 年前 作者 fatsnail 7090 次浏览 最后一次编辑是 8 年前

代码如下: function loadAll() { // load all data updateService[prop].load(load_data); var mem = process.memoryUsage(); console.log(‘rss:’, Math.round((mem.rss / 1024)) + “KB”); } setInterval(loadAll, 1000 * 0.5);

加载代码: TopadSchema = mongoose.Schema({ name : String, desc : String, updateTime : Number, }, { collection : ‘topad’ // 文档名 });

var TopadModel = mongoose.model('Topad', TopadSchema);

exports.loadTopad = function(callback) {
TopadModel.find({}).sort('-updateTime').limit(1).exec(
function(err, topads) {
if (err) {
 if (callback)
  callback(err);
 return;
}
if (!topads || topads.length === 0) {
 if (callback)
  callback(null, {});
 return;
}

var topad_res = topads[0];
if (callback)
 callback(null, topad_res);

}); }

周期性执行的时候内存一直在涨, 貌似就是内存泄漏了。 请问各位大大,这个是什么情况呀。

1 回复
  1. 最好将console.log的日志贴出部分,以说明内存增涨的幅度。KB单位的内存变化对有垃圾回收机制的语言来说,正常的不能再正常。请将以MB为单位打印nodejs的内存变化。

  2. 请以--expose_gc来运行node,调用gc()后才打印内存的大小,以排除未回收的临时对象所造成的影响。例如:node --exporse_gc app.js,然后在loadall增加gc()

    function loadAll() {
    // load all data
    updateService[prop].load(load_data);
    gc();
    var mem = process.memoryUsage();
    console.log('rss:', Math.round((mem.rss / 1024/1024)) + "MB");
    }
回到顶部