emitter.setMaxListeners()的问题
发布于 12 年前 作者 fyddaben 13703 次浏览 最后一次编辑是 8 年前

我的node版本是最新版本。而且,没有使用event。只是简单的刷新列表页面,出现 warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. data: Trace data: at Socket.EventEmitter.addListener (events.js:160:15) data: at Socket.Readable.on (_stream_readable.js:653:33) data: at Socket.EventEmitter.once (events.js:179:8) data: at TCP.onread (net.js:527:26)

5 回复

问题的根源是在同一个对象上注册过多的监听函数,例如on(<event>,<callback>)这种调用。由于半点相关代码都没贴出来,偶也只能给出一些笼统的提示: 刷新列表对应的函数里面,是否依赖于外部某些对象,是否一直通过on函数注册监听,有没有在适当的地方通过removeAllListeners注销监听。

问题比较隐蔽,相对于明显的 on函数,我更多的使用 callback 这种调用,根据你的回复,我得检查一下,消息队列的监听 是不是有不合理的地方。

哪有。。我把所有的监听函数都去掉了,用的callback回调。。还是会有这种情况发生。。

既然如此肯定自己的代码没问题,那么就把触发这个警告信息的socket揪出来,setMaxListeners(0)来绕过此警告吧。

PS:callback也有可能与事件监听挂钩的,event是nodejs的核心之一,事件的监听是不可避免的。

回到顶部