(节点:6261)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏
Posted
技术标签:
【中文标题】(节点:6261)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏【英文标题】:(node:6261) MaxListenersExceededWarning: Possible EventEmitter memory leak detected 【发布时间】:2018-10-31 06:23:56 【问题描述】:我在 nodejs 应用程序上收到此错误: 节点版本:v8.11.1
(node:6261) MaxListenersExceededWarning: Possible EventEmitter memory leak
detected. 11 wakeup listeners added. Use emitter.setMaxListeners() to increase
limit
我有一个使用 node-apn 将通知推送到 ios 设备的非常简单的代码。 代码运行良好,我也在设备上收到推送通知
var express = require('express')
, serverPort = 6900
, app = express()
, http = require('http')
, https = require('https')
, fs = require('fs')
, apn = require('apn')
;
var server = http.createServer(function (req, res)
res.writeHead(200, 'Content-Type': 'text/plain');
res.write('Hello!');
res.end();
);
server.listen(serverPort, (err) =>
if(err) return console.log("Something bad happened", err);
);
var apnOptions =
token:
,
production: false
;
var apnProvider = new apn.Provider(apnOptions);
var note = new apn.Notification();
note.expiry = Math.floor(Date.now() / 1000) + 3600; // Expires 1 hour from now.
note.badge = 3;
note.sound = "ping.aiff";
note.alert = "\uD83D\uDCE7 \u2709 You have a new message";
note.payload = 'messageFrom': 'John Appleseed' ;
note.topic = "com.example.test";
apnProvider.send(note, '6A752501A5DAFF9DCSFRE56C5B0E699385CD14B586CEF4B9C5012DDA4').then( (result) =>
console.log(result);
);
这里的问题在于 APN 代码,因为一旦我评论 APN 代码,我就不会再遇到这个错误了。 谁能知道我的代码有什么问题?我觉得我已经在这里完成了所有事情,但我仍然面临这个问题。
【问题讨论】:
你见过this question或this comment in Github吗?不幸的是,问题很可能出在node-apn
。请发布堆栈跟踪和您正在使用的node-apn
版本。
【参考方案1】:
有两种解决方案。两者都与更新最大数量的侦听器有关,都应在代码开头添加。
1- 您可以为如下事件侦听器设置 0,这是有风险的,因为您基本上是在取消限制:
const emitter = new EventEmitter()
emitter.setMaxListeners(0)
2- 全局修复错误,设置一个高值作为最大值像
require('events').EventEmitter.prototype._maxListeners = 100;
参考1:https://nodejs.org/docs/v0.4.7/api/events.html#emitter.setMaxListenershttps://nodejs.org/docs/v0.4.7/api/events.html#emitter.setMaxListeners
参考2:possible EventEmitter memory leak detected
【讨论】:
@StormTrooper 当然,让我知道 :)【参考方案2】:node-apn
有several issues,尝试使用node-apn-http2
。
npm install node-apn-http2
替换, apn = require('apn')
, apn = require('node-apn-http2')
【讨论】:
以上是关于(节点:6261)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章