检测到可能的EventEmitter内存泄漏

我收到以下警告:

(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace: 
    at EventEmitter.<anonymous> (events.js:139:15)
    at EventEmitter.<anonymous> (node.js:385:29)
    at Server.<anonymous> (server.js:20:17)
    at Server.emit (events.js:70:17)
    at HTTPParser.onIncoming (http.js:1514:12)
    at HTTPParser.onHeadersComplete (http.js:102:31)
    at Socket.ondata (http.js:1410:22)
    at TCP.onread (net.js:354:27)

我在server.js中编写了这样的代码:

http.createServer(
    function (req, res) { ... }).listen(3013);

如何解决呢?

神乐2020/03/23 11:31:09

我们团队对此的解决方法是从.npmrc中删除注册表路径。我们在rc文件中有两个路径别名,一个是指向已被弃用的Artifactory实例。

错误无关,与我们的应用程序的实际代码,但一切都与我们的开发环境。

小胖Gil2020/03/23 11:31:09

我面临着同样的问题,但是我已经成功地通过异步等待进行了处理。
请检查是否有帮助。

让dataLength = 25;
之前:
  for(让i = 0; i <dataLength; i ++){
      sftp.get(remotePath,fs.createWriteStream(xyzProject/${data[i].name}));
  }

之后:
  for(let i = 0; i <dataLength; i ++){
      等待sftp.get(remotePath,fs.createWriteStream(xyzProject/${data[i].name}));
  }

番长2020/03/23 11:31:08

我有同样的问题。和问题是由于我在2个侦听器上侦听端口8080而引起的。

setMaxListeners() 工作正常,但我不推荐它。

正确的方法是检查您的代码中是否有其他侦听器,删除侦听器或更改您正在侦听的端口号,这解决了我的问题。

宝儿2020/03/23 11:31:08

在使用以下方法创建新的侦听器之前,您需要清除所有侦听器:

客户端服务器

socket.removeAllListeners(); 

假设套接字是您的客户端套接字/或创建的服务器套接字。

您还可以订阅特定的事件侦听器,例如connect像这样删除侦听器:

this.socket.removeAllListeners("connect");
猴子2020/03/23 11:31:08

直到今天开始时,我一直都这样grunt watch终于解决了

watch: {
  options: {
    maxListeners: 99,
    livereload: true
  },
}

烦人的消息不见了。

Gil2020/03/23 11:31:08

在我的情况下,child.stderr.pipe(process.stderr)当我启动10个(或大约)孩子实例时,它就是被调用的。因此,导致将事件处理程序附加到LOOP中的同一EventEmitter对象的任何事情,都会导致nodejs抛出此错误。

小小2020/03/23 11:31:08

在Mac OS X上安装Aglio时,我也收到此警告。

我用cmd修复它。

sudo npm install -g npm@next

https://github.com/npm/npm/issues/13806

西门2020/03/23 11:31:08

替换.on()once()once()当事件由同一函数处理时,使用会删除事件侦听器。

如果这不能解决问题,请在package.json“ restler”中重新安装restler:“ git://github.com/danwrong/restler.git#9d455ff14c57ddbe263dbbcd0289d76413bfe07d”

这与restler 0.10与节点的行为不当有关。您可以在此处查看git上已关闭的问题:https : //github.com/danwrong/restler/issues/112 但是,npm尚未更新此内容,因此这就是为什么您必须引用git head的原因。

2020/03/23 11:31:08

我想在此指出警告的出现是有原因的,正确的解决办法很有可能不会增加限制,而是弄清楚为什么要在同一事件中添加如此多的侦听器。仅当您知道为什么要添加如此多的侦听器并确信这是您真正想要的时,才增加限制。

我找到此页面是因为收到此警告,并且在我的情况下,我正在使用的某些代码中存在一个错误,该错误将全局对象转换为EventEmitter!我当然建议不要在全球范围内增加限制,因为您不希望这些事情被忽视。