2012-02-29 57 views
4

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

/** 
* 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); 
}) 

回答

3

它可能node_redis排队的命令在它的offline_queue。您可以检查redis.offline_queue.length,并且可能会停止发布命令,无论何时发生太大或类似的事情。另见node_redis documentation(搜索offline_queue)。