亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢測到可能的EventEmitter內存泄漏

檢測到可能的EventEmitter內存泄漏

慕蓋茨4494581 2019-08-26 17:38:58
檢測到可能的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);如何解決這個問題?
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

我想在此指出,警告是有原因的,并且很有可能正確的修復不會增加限制,但要弄清楚為什么要為同一事件添加如此多的監聽器。如果您知道為什么要添加如此多的聽眾并且確信這是您真正想要的,那么只能增加限制。

我發現這個頁面是因為我收到了這個警告,在我的情況下,我使用的一些代碼中存在一個錯誤,即將全局對象轉換為EventEmitter!我當然建議不要在全球范圍內增加限制,因為你不希望這些事情被忽視。


查看完整回答
反對 回復 2019-08-26
?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

默認情況下,任何單個事件最多可以注冊10個偵聽器。


如果是您的代碼,您可以通過以下方式指定maxListeners:


const emitter = new EventEmitter()

emitter.setMaxListeners(100)

// or 0 to turn off the limit

emitter.setMaxListeners(0)

但如果它不是您的代碼,您可以使用該技巧來全局增加默認限制:


require('events').EventEmitter.prototype._maxListeners = 100;

當然你可以關掉限制但要小心:


// turn off limits by default (BE CAREFUL)

require('events').EventEmitter.prototype._maxListeners = 0;

BTW。代碼應該在應用程序的最開頭。


ADD:從節點0.11開始,此代碼也可以更改默認限制:


require('events').EventEmitter.defaultMaxListeners = 0


查看完整回答
反對 回復 2019-08-26
  • 3 回答
  • 0 關注
  • 1929 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號