NodeJS:如何调试“检测到的EventEmitter内存泄漏。添加了11位听众”

浏览:10日期:2024-02-09
如何解决NodeJS:如何调试“检测到的EventEmitter内存泄漏。添加了11位听众”?

原来这是nodejs核心中的错误,我们在这里谈论这个问题:https://github.com/joyent/node/issues/5108

恢复为旧版本v0.8.23。(您可以从此处下载并安装/编译它:http://blog.nodejs.org/2013/04/08/node-v0-8-23-legacy/)

我看到了关于此主题的一些反馈,但问题似乎已经消失多年了。请注意,此响应 。如果您处于其他情况,请在该线程上查看其他响应,并且不要降级您的版本(如该响应所建议),这样会浪费您的时间。

解决方法

我该如何调试我的应用程序并抛出此错误:

(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)

通过jansalawa的搜索,我发现了一个工作库(longjohn),用于增加详细的堆栈跟踪。在fardjad的回应下,我发现我们必须对EventEmitter.addListenerAND 进行原型设计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)

相关文章: