赞
踩
在用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))
再次启动服务,可以看到执行栈的信息:
源头出现在events.js
中,node
中,默认情况下,如果为一个特定事件添加了超过10
个监听器,EventEmitter
将打印一个警告。这是一个有用的默认值,有助于发现内存泄漏。emitter.setMaxListeners()
方法允许针对这个特定的EventEmitter
实例修改这个限制。该值可以设置为Infinity
(或0
),以表示无限数量的侦听器。(官方说明:emitter.setMaxListeners(n))
实际情况下,并发超过10很正常,我们可以通过如下设置来移除警告:
// 不限制监听数量
process.setMaxListeners(0)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。