使用redis brpop时节点内存泄漏

r1wp621o  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(342)

我在一个节点应用程序中遇到内存泄漏问题。应用程序在redis中订阅了一个主题,当接收到一条消息时,使用从列表中弹出一条消息 brpop . 此应用程序有许多示例在生产环境中运行,因此一个示例可能会阻止redis列表中的消息。下面是使用redis消息的代码段:

private doWork(): void {
    this.storage.subscribe("newRoom", (message: [any, any]) => {
      const [msg] = message;
      if (msg === "room") {
        return new Promise( async (resolve, reject) => {
          process.nextTick( async () => {
            const roomIdData = await this.storage.brpop("newRoomList"); // a promisified version of brpop with timeout of 5s
            if (roomIdData) {
              const roomId = roomIdData[1];
              this.createRoom(roomId);
            }
          });
          resolve();
        });
      }
    });
  }

我试着用chrome调试器调试内存泄漏,发现创建了太多的闭包对象。我怀疑这是由于这段代码,因为我能够在closure对象中看到redis客户机对象的名称,但我不知道如何修复它。我补充道 process.nextTick 但没用。我在用 node-redis 连接到redis的客户端。从chrome调试器工具附加对象Map屏幕截图。

附笔。 blk redis客户端对象名是否专门用于阻塞命令,即。 brpop .
编辑:已替换 brpoprpop 我们看到内存增长率显著下降,但现在工作人员之间的信息分配出现了偏差。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题