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

标签 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);
})

最佳答案

可能是 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/

相关文章:

eclipse - Eclipse 中的 node.js - 大多数人使用哪些插件?

node.js - 在 Node 13 中将 Inquirer 作为模块导入

javascript - 限制 NodeJS setImmediate

mysql - 加快 MySQL 中大量多查询语句的性能

javascript - 如何使用 ES6 类运行 NodeJS?

javascript - 在 Mac OS X 上使用 SWIG 为 javascript 编译 C++

javascript - 如何从 .js 代码确定 JavaScript 引擎?

javascript - 是否可以使用 JavaScript 方法来处理未定义的属性?

node.js - NodeJS - 在注册验证电子邮件中发送 Json Web token (JWT)是否安全?

node.js - 如何正确地从 lambda 运行二进制文件?