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

在NestJS中使用generic-pool创建Puppeteer连接池时遇到并发测试警告,警告提示监听事件数超过默认限制。为消除警告并处理高并发场景,可以通过设置`process.setMaxListeners(0)`来移除监听数量限制。此方法可避免内存泄漏警告,但需注意可能增加内存消耗。调整后,确保对资源管理进行适当监控以保持服务稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在用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)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码飞_CC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值