当前位置:   article > 正文

MaxListenersExceededWarning: Possible EventEmitter memory leak detected.警告的处理

maxlistenersexceededwarning: possible eventemitter memory leak detected. 11

在用nestjs开发node服务的过程中,使用generic-pool创建puppeteer连接池,并发测试时发现控制台有警告信息,如下:

(node:30460) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added to [process]. Use emitter.setMaxListeners() to increase limit
警告该信息告诉我们监听事件超出了阈值,可能会导致内存泄漏,让我们调用emitter.setMaxListeners()来提高阈值

该信息提示过于简单,我们无法定位问题,这时我们可以先通过添加如下代码来输出执行栈的信息:

process.on('warning', e => console.warn(e.stack))
  • 1

再次启动服务,可以看到执行栈的信息:
执行栈信息
源头出现在events.js中,node中,默认情况下,如果为一个特定事件添加了超过10个监听器,EventEmitter将打印一个警告。这是一个有用的默认值,有助于发现内存泄漏。emitter.setMaxListeners()方法允许针对这个特定的EventEmitter实例修改这个限制。该值可以设置为Infinity(或0),以表示无限数量的侦听器。(官方说明:emitter.setMaxListeners(n)

实际情况下,并发超过10很正常,我们可以通过如下设置来移除警告:

// 不限制监听数量
 process.setMaxListeners(0)
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/91629
推荐阅读
相关标签
  

闽ICP备14008679号