NodeJS:如何调试"EventEmitter检测到的内存泄漏".添加了11位听众 [英] NodeJS : How to debug "EventEmitter memory leak detected. 11 listeners added"

查看:288
本文介绍了NodeJS:如何调试"EventEmitter检测到的内存泄漏".添加了11位听众的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何调试引发此错误的应用程序:

How can I debug my application which throw this error:

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

I could not find the assumed leaking object for increasing listener limit by .setMaxListeners(0);

解决方案(来自fardjad和jan salawa)

通过jan salawa的搜索,我发现了一个有效的库( longjohn ),用于增加详细的堆栈跟踪.在fardjad的回应中,我发现我们必须为EventEmitter.addListener AND EventEmitter.on做原型.

With jan salawa's searches I found a working library (longjohn) for increasing stack traces verbose. With fardjad's response I have found that we have to prototype EventEmitter.addListener AND EventEmitter.on.

有了解决方案,我可以得到以下新痕迹:

With the solution I could get this new trace:

(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核心中的错误,我们在这里讨论此问题:

It turns out that this is a bug in nodejs core, we are talking about this problem here : https://github.com/joyent/node/issues/5108

错误的http服务器的解决方案抛出EventEmitter memory leak detected并填满了可用内存/可用CPU时间:

Solution for bugged http servers thats throw an EventEmitter memory leak detected and fill up the available memory / available CPU times :

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

Revert to legacy version v0.8.23. (You can download and install/compile it from here : http://blog.nodejs.org/2013/04/08/node-v0-8-23-legacy/)

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

UPDATE 2018 : I see several feedbacks on this topic whereas the problem looks to be gone since years. Note that this response is only for a leaking http server build with nodejs. If you are in other scenario, please look the others responses on this thread and dont downgrade your version (as suggested on this response), you will waste your time.

这篇关于NodeJS:如何调试"EventEmitter检测到的内存泄漏".添加了11位听众的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆