猿问

检测到可能的EventEmitter内存泄漏

检测到可能的EventEmitter内存泄漏

我收到以下警告:

(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace: 
    at EventEmitter.<anonymous> (events.js:139:15)
    at EventEmitter.<anonymous> (node.js:385:29)
    at Server.<anonymous> (server.js:20:17)
    at Server.emit (events.js:70:17)
    at HTTPParser.onIncoming (http.js:1514:12)
    at HTTPParser.onHeadersComplete (http.js:102:31)
    at Socket.ondata (http.js:1410:22)
    at TCP.onread (net.js:354:27)

我在server.js中编写了这样的代码:

http.createServer(
    function (req, res) { ... }).listen(3013);

如何解决这个问题?


慕盖茨4494581
浏览 1877回答 3
3回答

慕尼黑5688855

我想在此指出,警告是有原因的,并且很有可能正确的修复不会增加限制,但要弄清楚为什么要为同一事件添加如此多的监听器。如果您知道为什么要添加如此多的听众并且确信这是您真正想要的,那么只能增加限制。我发现这个页面是因为我收到了这个警告,在我的情况下,我使用的一些代码中存在一个错误,即将全局对象转换为EventEmitter!我当然建议不要在全球范围内增加限制,因为你不希望这些事情被忽视。

凤凰求蛊

默认情况下,任何单个事件最多可以注册10个侦听器。如果是您的代码,您可以通过以下方式指定maxListeners:const emitter = new EventEmitter()emitter.setMaxListeners(100)// or 0 to turn off the limitemitter.setMaxListeners(0)但如果它不是您的代码,您可以使用该技巧来全局增加默认限制:require('events').EventEmitter.prototype._maxListeners = 100;当然你可以关掉限制但要小心:// turn off limits by default (BE CAREFUL)require('events').EventEmitter.prototype._maxListeners = 0;BTW。代码应该在应用程序的最开头。ADD:从节点0.11开始,此代码也可以更改默认限制:require('events').EventEmitter.defaultMaxListeners = 0
随时随地看视频慕课网APP

相关分类

Node.js
我要回答