我在一个节点应用程序中遇到内存泄漏问题。应用程序在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
.
编辑:已替换 brpop
与 rpop
我们看到内存增长率显著下降,但现在工作人员之间的信息分配出现了偏差。
暂无答案!
目前还没有任何答案,快来回答吧!