我该如何调试我的应用程序并抛出此错误:
(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);
.setMaxListeners(0);
解决方案(来自Fardjad和Jan Salawa)
通过jan salawa的搜索,我发现了一个工作库(longjohn),用于增加详细的堆栈跟踪。在fardjad的回应下,我发现我们必须对EventEmitter.addListener AND 进行原型设计EventEmitter.on。
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)
原来这是nodejs核心中的错误,我们在这里谈论这个问题:https : //github.com/joyent/node/issues/5108
错误的http服务器的解决方案抛出EventEmitter memory leak detected并填满了可用内存/可用CPU时间:
EventEmitter memory leak detected
恢复为旧版本v0.8.23。(您可以从此处下载并安装/编译它:http : //blog.nodejs.org/2013/04/08/node-v0-8-23-legacy/)
v0.8.23
2018年更新: 我看到了关于此主题的一些反馈,但问题似乎已经消失多年了。请注意,此响应 仅适用于使用nodejs泄漏的http服务器构建 。如果您处于其他情况,请在该线程上查看其他响应,并且不要降级您的版本(如该响应所建议),这样会浪费您的时间。