重启redis时为什么node.js内存泄漏

时间:2012-02-29 09:15:50

标签: node.js v8

如果你运行下面的代码,并重新启动你的redis服务器,你将得到一个或两个uncaughtException,但不再有更多的错误,然后,内存将增长非常快,我想知道为什么以及如何解决这个问题问题

/**
 * This code will memory leak, if you restart redis server when the node process is running
 * 
 * @author Gui Lin
 */
var redis = require('redis').createClient();

setInterval(function(){

  redis.multi()
    .zrangebyscore('timeup', 0, Date.now())
    .zremrangebyscore('timeup', 0, Date.now())
    .exec(function(err, data) {
          if(err) console.log(err.stack);
          if(data) data = data[0];
      });
}, 1);

process.on('uncaughtException', function(err) {
    console.log(err.stack);
})

1 个答案:

答案 0 :(得分:3)

可能node_redis排队offline_queue中的命令。您可以检查redis.offline_queue.length,并且可能会在增长过大或类似的情况下停止发出命令。另请参阅node_redis documentation(搜索offline_queue)。