node.js - Node JS : How to debug "EventEmitter memory leak detected. 11 listeners added"

标签 node.js memory-leaks eventemitter

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

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

相关文章:

node.js - Heroku + socket.io 广播上的多个测功机

Javascript |了解回调函数的安全性

templates - 将 hogan.js 与express.js + 虚拟主机结合使用

node.js - Nodejs 事件被多次发出

javascript - 重写 Node eventEmitter.on 并关闭日志记录不起作用

node.js - 如何在 stunnel 后面的 node.js/connect 应用程序中设置 req.connection.proxySecure

c++ - grpc server 不会释放内存,是内存泄漏了吗?

c - 为传递给函数的数组指针初始化内存时出现段错误

javascript - 使用 Promise 代替事件回调

c++ - 分配结构数组后内存被覆盖