Socket.io内存在客户端断开连接后没有减少

5
var server = require('socket.io').listen(1781);
server.set('log level', 1);

setInterval(function() {
    console.log(process.memoryUsage());
}, 60000);

我在我的Socket.io 0.9.16和Node 0.10.12 / 0.10.13应用程序中有内存泄漏问题。当连接一些客户端时,RSS内存会增加,但是在断开连接后,内存不会降下来。我将应用程序简化为上述代码,以排除我的任何错误。 连接1000个客户端后,进程占用65MB(初始值约为15MB),并且在我断开所有客户端之后,内存仍然很高。请问有任何帮助吗? 我阅读的所有文章/答案都是关于早期版本的node或socket.io。我非常渴望找到解决方案。

2
65 MB 不足以启动垃圾回收器,垃圾回收可能会减慢服务器的速度。最有可能会增加到几百 MB(这个值可能因不同的节点版本而异),之后就会保持在那里,因为旧连接已被删除。 - user568109
1
@hfcorriez 看来我担心太多了。就像user568109所说的那样。另外,我使用nodetime测试应用程序时发现它从未停止占用内存。因此,我放弃了nodetime并观察了我的应用程序,只使用top -p [nodeprocess]。现在一切都很好。内存消耗现在是稳定的。 - Tiberiu Maxim
没有遇到这些问题。无论如何,我的客户端不是浏览器,而是iOS/Android设备。 - Tiberiu Maxim
你可以通过将未使用的变量赋值为 null 来 "帮助" 垃圾收集器:myUnusedClass = null; - Rodrigo Polo
@TiberiuMaxim 如果您的问题已经解决,可以请您自己回答并将其接受为被采纳的答案,谢谢。 - GiveMeAllYourCats
显示剩余4条评论
2个回答

0

我在使用socket.io时也遇到了类似的问题。似乎一旦客户端连接,就永远不会从socket.io中删除。

您可以调试SocketIoServer.sockets.sockets的值。它是一个包含所有已连接(和已断开连接)套接字的数组。也许这就是您的内存泄漏所在之处。

此外,我刚刚看到socket.io发布了1.0版本。您可以尝试使用它并查看是否解决了该问题。


我检查过了,这种情况并没有发生在我身上。 - Tiberiu Maxim

0

我曾使用nodetime来跟踪内存使用情况,但似乎它存在内存泄漏问题。放弃使用nodetime后,内存消耗保持稳定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接