Node.jsがEventEmitterでメモリリークしてると警告メッセージが出る件【少し確認した】
前回、あとで読むにチェックしてから、かなりの時間が
流れたw(ΦωΦ)
たまに発生するけど、エラーという訳でもないよなってことで
眼精疲労でPC作業が疲れたので少し確認してみた。
ら、前回よりもビンゴじゃね?って情報が得られた。
Qiitaで発見した記事には以下のような説明が書かれていた。
EventEmitterは、イベント名に対して11個以上登録された状態になるとこのような警告を発する。
らしいw
ちなみにデフォルトは10個までとか。
そして、この警告を表示させないために、イベントハンドラの数を変更する
方法については以下。
(ex) eventEmitter.setMaxListeners
var events = require('events');
var eventEmitter = new eventEmitter();
eventEmitter.setMaxListeners(10);
第1引数に警告が表示されるイベントハンドラの数を指定する。
ただし、0指定時は警告が表示されなくなる(マジか?)
イベントハンドラ数の取得については以下。
var max = eventEmitter.getMaxListeners();
上記でmaxに警告が表示されるイベントハンドラの数が返って
くる(らしい)。
上記を参考にしたサンプルコードが以下(参考サイトのコードを
そのまま書いたw)
(ex) eventEmitterMaxListeners.js
var events = require('events');
var eh1 = function (p) {
console.log(p.name + ' ' + p.age);
};var eventEmitter = new events.EventEmitter();
console.log(eventEmitter.getMaxListeners());
for (var i = 0; i < 20; i++) {
console.log(i);
eventEmitter.on('new', eh1);
}
eventEmitter.setMaxListeners(15);
console.log(eventEmitter.getMaxListeners());
for (var i = 0; i < 20; i++) {
console.log(i);
eventEmitter.on('newnew', eh1);
}
つまり、デフォルト値が10だから、11を超えると警告が出て来る
のが嫌だったらデフォルト値の数字を変更してね。
ってことか?(ΦωΦ)
でも、これって自分の預かり知らぬところ(BOTフレームワーク
の中)で発生してる気がするので、そういうこともあるよね。
くらいの知識を持っておけば聞かれた時に、説明できるねって
ことで。特にNode.jsのバージョンは関係なかった。
githubにバージョンが7以上でも発生してたという報告あったしなー。
[参考サイト]