答えが常にあった同様の問題を抱えている人々への参照をいくつか見つけました。完了したら必ず window.close() を呼び出してください。ただし、それは私にとってはうまくいかないようです(ノード0.8.14およびjsdom 0.3.1)
シンプルな再現
var util = require('util');
var jsdom=require('jsdom');
function doOne() {
var htmlDoc = '<html><head></head><body id="' + i + '"></body></html>';
jsdom.env(htmlDoc, null, null, function(errors, window) {
window.close();
});
}
for (var i=1;i< 100000;i++ ) {
doOne();
if(i % 500 == 0) {
console.log(i + ":" + util.inspect(process.memoryUsage()));
}
}
console.log ("done");
私が得る出力は
500:{ rss: 108847104, heapTotal: 115979520, heapUsed: 102696768 }
1000:{ rss: 198250496, heapTotal: 194394624, heapUsed: 190892120 }
1500:{ rss: 267304960, heapTotal: 254246912, heapUsed: 223847712 }
...
11000:{ rss: 1565204480, heapTotal: 1593723904, heapUsed: 1466889432 }
この時点で、ファンが暴走し、テストは実際に停止します...または少なくとも非常にゆっくりと進み始めます
メモリリークを取り除くためのwindow.close以外のヒントはありますか(またはメモリリークのように見えます)
ありがとう!
ピーター