如果你运行下面的代码,然后重启你的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);
})
最佳答案
可能是 node_redis
在它的 offline_queue
中排队命令。您可以检查 redis.offline_queue.length
,并可能在它变得太大或类似情况时停止发出命令。另见 node_redis documentation (搜索 offline_queue
)。
关于node.js - 为什么重启redis时node.js内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9496346/