【问题标题】:Socket.io emit causing steady memory increaseSocket.io 发出导致内存稳定增加
【发布时间】:2023-10-23 00:11:01
【问题描述】:

在我的程序中,使用带有 Redis 适配器的 Socket.io 向所有套接字发出一些值,存在内存泄漏问题。

代码片段:

....node modules require statements here....

const server = http.createServer(app);
io = socketIo(server);
io.adapter(socketIoRedis({ host: redis_host, port: redis_port }));

for(....) {
    data_out = {A:10, B:20, id:'1234'} //Just sample data, it changes by loop
    data_ref = data_out[id]
    io.emit(data_ref, JSON.stringify(data_out));
}    

在服务器中,当使用pm2运行程序并监控内存(pm2 monit)时,内存不断增加。并且服务器只是挂起达到可用的最大内存大小。

如何避免内存增加?没有连接的客户端也会发生这种情况。

【问题讨论】:

    标签: node.js memory-leaks socket.io pm2


    【解决方案1】:

    这是我面临的类似问题,对我而言,问题在于 redisAdapter。 请检查适配器实现,并确保没有泄漏内存,拍摄堆快照,将其加载到 chrome 中,看看是否能找出泄漏者。对我来说,这是使用 ioredis 创建 redisCluster。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center