2

私はプログラミングにかなり慣れていないので、Web クローラーに関する論文に取り組んでいます。私は Web クローラーによって提供されましたが、シングル スレッドであるため速度が遅すぎることがわかりました。1000 の Web ページをクロールするのに 30 分かかりました。実行用に複数のスレッドを作成しようとしましたが、20 のスレッドで同時に 1000 の Web ページを実行するのに 2 分しかかかりませんでした。しかし、今、「Heap Out of Memory」エラーが発生しています。私がしたことは間違っていたと確信しています.20スレッドのforループを作成していました。エラーを出さずにJavaクローラーをマルチスレッド化する正しい方法は何ですか? そして、それについて言えば、マルチスレッドは私の問題の解決策ですか?

4

3 に答える 3

3

簡単な答え (上記参照) は、JVM メモリ サイズを増やすことです。これは役に立ちますが、実際の問題は、Web クロール アルゴリズムが、アクセスするページの数に比例して増加するインメモリ データ構造を作成していることにある可能性があります。その場合、解決策はおそらくそのデータ構造のデータをディスクに移動することです。例えばデータベース。

問題に対する最も適切な解決策は、Web クローラーの動作方法、収集対象、およびクロールする必要があるページの数によって異なります。

于 2009-07-18T05:04:26.503 に答える
3

私の最初の提案は、JVM のヒープ サイズを増やすことです。

http://www.informix-zone.com/node/46

于 2009-07-18T00:17:06.287 に答える
0

プログラムの速度について:

Webクローラーがサーバー上のrobots.txtファイルに準拠している場合(サイト管理者による禁止を回避する必要があります)、実行できることはほとんどない可能性があります。

プログラムのプロファイルを作成する必要がありますが、ほとんどの場合、クローラーがhtmlページをダウンロードすることになると思います。サイト管理者は、ダウンロードが速すぎて帯域幅を使い果たしてしまうと、通常は満足できません。

要約すると、そのサイトを傷つけずにサイト全体をダウンロードするには、しばらく時間がかかります。

于 2009-07-18T00:29:04.557 に答える