如何调试抛出此错误的应用程序:
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at Socket.EventEmitter.addListener (events.js:160:15)
at Socket.Readable.on (_stream_readable.js:653:33)
at Socket.EventEmitter.once (events.js:179:8)
at TCP.onread (net.js:527:26)
我找不到假设的通过.setMaxListeners(0);
增加监听器限制的泄漏对象
解决方案(来自fardjad和jan salawa)
通过jan salawa的搜索,我找到了一个可以增加堆栈跟踪冗余的工作库(longjohn)。有了fardjad的响应,我发现我们必须构建EventEmitter.addListener
和 EventEmitter.on
的原型。
有了这个解决方案,我就可以得到这个新的跟踪:
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at EventEmitter.addListener.EventEmitter.on (xxx/main.js:44:15)
at Readable.on (_stream_readable.js:653:33)
at ServerResponse.assignSocket (http.js:1072:10)
at parser.onIncoming (http.js:1979:11)
at parserOnHeadersComplete (http.js:119:23)
at socket.ondata (http.js:1912:22)
at TCP.onread (net.js:510:27)
发布于 2013-04-26 02:28:30
原来这是nodejs核心中的一个bug,我们在这里讨论这个问题:https://github.com/joyent/node/issues/5108
针对出现错误的http服务器的解决方案,抛出 EventEmitter memory leak detected
并填满可用内存/可用CPU时间:
恢复到旧版v0.8.23
。(你可以从这里下载并安装/编译它:http://blog.nodejs.org/2013/04/08/node-v0-8-23-legacy/)
UPDATE 2018 :我在这个话题上看到了几次反馈,而这个问题看起来已经多年没有了。请注意,对于使用nodejs构建的泄漏http服务器,此响应仅为。如果您在其他情况下,请查看此帖子上的其他回复,不要降低您的版本(如此回复中所建议的),这将浪费您的时间。
发布于 2013-03-25 22:49:33
对我来说,看起来你的事件循环被阻塞了。如果您在node.js事件循环中执行cpu密集型任务,则可能会发生这种情况。您可以使用child process来执行密集型任务。
您可以使用following methods检查是什么阻止了node.js
每次调用的
中使用的库
发布于 2014-03-22 09:30:56
这正是发生在我身上的事情。对我来说,我意外地将一个事件侦听器嵌套在另一个事件侦听器中。
例如,查看您的代码并确保在另一个事件侦听器块中没有事件侦听器块(除非您是故意这样做的):
socket.on('data', function(data) {
//code goes here
socket.on('close' , function() {
//code goes here
});
});
在上面的错误示例中,socket.on ('close')侦听器应该位于socket.on('data')块的外部。
在我的例子中,当我收到5个数据流时,socket.on(' close ')侦听器正在等待一个close事件发生。当我关闭一次,另一个关闭事件将执行。这显然不是我想要的。这是由于Node.js是非阻塞的。由于回调函数,它会“记住”事件。
https://stackoverflow.com/questions/15581978
复制相似问题