【问题标题】:How to improve this code with memory leak in nodejs with zlib?如何使用 zlib 在 nodejs 中通过内存泄漏改进此代码?
【发布时间】:2012-06-14 11:22:22
【问题描述】:

当我添加 gzip 支持时,我遇到了 nodejs 中的内存泄漏问题。我写了一些测试代码。在下面的代码中,我使用 zlib,但我不知道为什么会出现内存泄漏。 如何改进此代码以避免内存泄漏?有人可以帮帮我吗?

var 
zlib = require('zlib'),
crypto = require('crypto');

var cacheList = {
  article: {},
};

  var timeoutId1, timeoutId2

  console.log('process.pid: '+ process.pid);

  clean = function()
  {
    var time = new Date().getTime();
timeoutId1 = setTimeout(function() { clean() }, 5000);

var countDeleted = 0;

for (id in cacheList.article) {
  if (cacheList.article[id] && cacheList.article[id].timeExpire + 5000 < time) {
    delete cacheList.article[id];
countDeleted++;
  }
}

console.log('deleted: ' + countDeleted);

}

  run = function()
  {
var time = new Date().getTime();
timeoutId1 = setTimeout(function() { run() }, 5);

var md5 = crypto.createHash('md5');
md5.update('' + time);
var id = md5.digest('hex');

//console.log('id: ' + id);
var text = id+id+id+id+id+id+id+id +id+id+id+id+id+id+id+id +id+id+id+id+id+id+id+id +id+id+id+id+id+id+id+id +id+id+id+id+id+id+id+id +id+id+id+id+id+id+id+id +id+id+id+id+id+id+id+id +id+id+id+id+id+id+id+id;

zlib.gzip(text, function(err, result) {
  if (!err) {
      cacheList.article[id] = {
      timeExpire: time + 10000,
      data: text,
      datagzip: result,
    };
  }
});

}

  timeoutId1 = setTimeout(function() { run() }, 3000);
  timeoutId2 = setTimeout(function() { clean() }, 5000);

【问题讨论】:

    标签: node.js memory memory-leaks zlib


    【解决方案1】:

    将最后两行更改为

    timeoutId1 = run()
    timeoutId2 = clean()
    

    由于您已经拥有调用 setTimeout 的函数,通过使用另一个 setTimeout,您是在告诉它运行该函数的另一个实例(它反过来调用自己,所以现在您让它运行两次,依此类推)。

    【讨论】:

    • 你说得对,但是当我用 gzip 删除部分时,我们没有内存泄漏。 zlib.gzip(text, function(err, result) { if (!err) { cacheList.article[id] = { timeExpire: time + 10000, data: text, datagzip: text, }; } }); ================================================== ====== to: cacheList.article[id] = { timeExpire: time + 10000, data: text, datagzip: text, } 差异仅在我们使用 gzip 时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    相关资源
    最近更新 更多