2012-02-29 91 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)。