1 か月以上、非常に厄介なメモリ リークの問題に苦しんでいますが、解決方法がわかりません。
私は、http、async、cheerio、および nano に基づいて、汎用の Web クローラーを作成しています。当初から、特定するのが非常に困難なメモリ リークに悩まされてきました。heapdump を実行して Google Chrome で分析できることはわかっていますが、出力を理解できません。通常、これは無意味な文字列とオブジェクトの集まりであり、いくつかの無名関数がまったく何も教えてくれません (私の経験不足かもしれません)。
結局、当時使っていたライブラリ(jQuery)に問題があるという結論に達し、Cheerioに置き換えました。私は Cheerio が問題を解決したという印象を持っていましたが、今ではそれほど劇的ではないと確信しています.
私のコードはhttps://github.com/lukaszkujawa/node-web-crawlerにあります。分析するコードが大量になる可能性があることは理解していますが、おそらく私は何かばかげたことをしていて、それは明らかに簡単なことではありません。複数の「スレッド」からのHTTPリクエストhttps://github.com/lukaszkujawa/node-web-crawler/blob/master/webcrawler/agent.jsを実行するメインエージェントクラスを疑っています( with async.queue
)。
コードを実行したい場合は、CouchDB が必要npm install
です。
$ node crawler.js -c conf.example.json
ノードがガベージ コレクションに夢中になることはありませんが、10 分間クロールすると、使用済みメモリが 1GB を簡単に超えてしまうことがあります。
(v0.10.21 と v0.10.22 でテスト済み)