一尘不染

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

node.js

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

(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

通过该解决方案,我可以获得以下新跟踪:

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

阅读 586

收藏
2020-07-07

共1个答案

一尘不染

原来这是nodejs核心中的错误,我们在这里谈论这个问题: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/)

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

2020-07-07