haiju's 開発メモ

開発に必要な情報を自分用にメモ

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以上でも発生してたという報告あったしなー。

[参考サイト]

qiita.com

github.com

github.com

info-i.net

pospome.hatenablog.com