MaxListenersExceededWarning

MaxListenersExceededWarning 是当 EventEmitter 实例监听的事件超过 MaxListeners 时,会在 process emit 的事件。 但是这个事件只会触发一次。比如执行下面这段代码试试。

'use strict';

const EventEmitter = require('events');

const e = new EventEmitter();

e.setMaxListeners(1)

const f = () => {};
Array(100).fill().forEach(() => {
    e.on('error', f);
});

setTimeout(() => {
    Array(100).fill().forEach(() => {
        e.on('error', f);
    });
}, 10000)

只会出现一次 MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 2 error listeners added to [EventEmitter]. Use emitter.setMaxListeners() to increase limit

所以看日志时要从程序启动后开始判断是否存在 MaxListenersExceededWarning。