检测到可能的 EventEmitter 内存泄漏。不和谐.js

Posted

技术标签:

【中文标题】检测到可能的 EventEmitter 内存泄漏。不和谐.js【英文标题】:Possible EventEmitter memory leak detected. Discord.js 【发布时间】:2021-01-27 09:30:55 【问题描述】:

当我睡着时我的机器人正在运行时,这个警告出现了:

MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 guildMembersChunk listeners added to [Client]. Use emitter.setMaxListeners() to increase limit

现在我的机器人在相当数量的服务器中,我该如何解决这个问题?

我环顾四周,看到了这个:

require('events').EventEmitter.defaultMaxListeners = 15; 

这会是解决方案吗?

【问题讨论】:

您需要显示代码 - 您是在为 guildMembersChunk 创建侦听器,还是在某个时候由库创建?你有关于错误发生之前发生了什么的日志吗? 【参考方案1】:

对于任何事件by default,最多可以注册10 侦听器。可以使用setMaxListener() 方法为单个发射器实例更改此限制,也可以通过将maxListeners count 设置为0 将值设置为Infinity。 由于您已将限制设置为15,并且只要侦听器的计数超过此限制,您就会看到EventEmitter memory leak detected 错误。而不是将其设置为 15 侦听器将其设置为 Infinity 并查看行为。

例如:

const  EventEmitter  = require('events');
const emitter = new EventEmitter();

//Setting the listeners to Infinity
emitter.setMaxListeners(0);

//To validate the number of listeners listening to event you may log the below line
emitter.listenerCount('eventName');

【讨论】:

以上是关于检测到可能的 EventEmitter 内存泄漏。不和谐.js的主要内容,如果未能解决你的问题,请参考以下文章

检测到可能的 EventEmitter 内存泄漏。不和谐.js

Winston - MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏

nodejs Websocket服务器 - 检测到可能的EventEmitter内存泄漏

MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个消息列表。使用emitter.setMaxListeners() 增加限制

NodeJS:如何调试“检测到 EventEmitter 内存泄漏。添加了 11 个侦听器”

Socket.io 聊天应用程序显示检测到 EventEmitter 内存泄漏。增加了 11 位听众。使用发射器.setMaxListeners()