如何调试抛出此错误的应用程序:
(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
AND EventEmitter.on
进行原型(prototype)设计。
有了这个解决方案,我可以得到这个新的踪迹:
(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)
最佳答案
原来这是nodejs核心的一个bug,我们在这里讨论这个问题:https://github.com/joyent/node/issues/5108
错误的 http 服务器的解决方案抛出 EventEmitter 内存泄漏检测
并填满可用内存/可用 CPU 时间:
恢复到旧版本 v0.8.23
。 (您可以从这里下载并安装/编译它:http://blog.nodejs.org/2013/04/08/node-v0-8-23-legacy/)
2018 年更新:我看到了一些关于这个主题的反馈,而这个问题似乎已经消失了多年。请注意,此响应仅适用于使用 nodejs 构建泄漏的 http 服务器。如果您在其他情况下,请查看此线程上的其他回复并且不要降级您的版本(如此回复所建议的那样),您将浪费您的时间。
关于node.js - Node JS : How to debug "EventEmitter memory leak detected. 11 listeners added",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15581978/