4

我有一个在 Node.js 和 Socket.io 上运行的相对简单的聊天类型应用程序。节点服务器从 Minecraft 服务器流式传输聊天数据,然后将其流式传输到使用 Socket.io 连接到网站上的任何客户端。可以在此处找到该系统的工作演示:standardsurvival.com/chat

它在大多数情况下工作得很好,但每隔一段时间节点服务器就会停止响应,并且此后不久活动连接就会死亡。在此期间,该进程将开始消耗 100% 的 CPU,但内存始终保持相对恒定,因此我怀疑是否涉及任何类型的内存泄漏。

这非常令人沮丧,因为我无法始终如一地重现该问题以找出问题所在,而且我不知道该去哪里找。我一直在设置循环并注释掉节点服务器和网站之间管道的各个部分,以尝试查明可能导致它的原因。目前还没有运气。

这个系统背后的代码可以在这里这里找到。

有任何想法吗?

4

1 回答 1

0

好吧,我最终弄清楚了问题所在。我正在使用的一个库正在为 Minecraft 服务器的标准 HTTP 请求打开 net.Sockets,但实际上从未关闭它们。显然,请求完成时从未调用过“结束”事件。因此,最终该进程的所有可用文件句柄都被用完并导致新请求彻底失败,这使得服务器似乎停止响应。如果我记录了这个错误,我会很快发现这一点。学过的知识。

我为所有套接字添加了超时以至少暂时解决此问题。现在服务器已经运行了好几天没有一个问题:)

于 2013-06-17T18:41:00.963 回答