[JavaScript] jsdom memory leak (メモリリーク)

Sun, January 11, 2015 - 1 min read

Node.js で jsdom を利用して数万件のウェブページをスクレイピングしたところ out of memory エラーが発生しました。

Node.js のエラーメッセージ

FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory

jsdom のメモリリーク解決方法

jsdom.env メソッドに渡す callback メソッドの中で使用した window オブジェクトに関連するメモリを解放するために window.close() メソッドを呼ぶ必要があるそうです。

jsdom.env(html, function (errors, window) {
  // free memory associated with the window
  window.close();
});

ドキュメントに書いてある通りに使わないとダメだなぁと痛感しました・・・。


参考情報

tmpvar/jsdom

jsdom and node.js leaking memory - Stack Overflow

javascript - Memory leak in Node.js scraper - Stack Overflow