2009-07-18 32 views
1

我對編程相當陌生,並且正在爲我的論文撰寫一個web爬行器。我已經提供了一個網絡爬蟲,但我發現它太慢,因爲它是單線程的。花了30分鐘時間來抓取1000個網頁。我試圖創建多個線程來執行,並使用20個線程同時運行1000個網頁僅需2分鐘。但是現在我遇到了「堆內存不足」錯誤。我敢肯定我做了什麼是錯誤的,它爲20個線程創建了for循環。多線程Java爬蟲而不發佈錯誤的正確方法是什麼?說到這些,是否將解決方案多線程化或不是?如何在Java Web Crawler中爲多線程處理OUT OF MEMORY錯誤

回答

2

簡單的答案(見上)是增加JVM內存大小。這將幫助,但很可能的是,真正的問題是,你的網頁檢索算法是創造增長成正比您訪問的網頁數量在內存中的數據結構。如果是這種情況,解決方案可能會將該數據結構中的數據移動到光盤;例如一個數據庫。

最合適的解決問題的方法取決於你如何網絡爬蟲的作品,它是什麼收藏,多少頁,你需要抓取。

0

關於你的程序的速度:

如果你的網絡爬蟲服從於服務器上的robots.txt文件(它應該避免被網站管理員禁止),那麼可能沒有什麼可以完成的。

你就應該剖析你的計劃,但我預計大部分的時間你的履帶式下載HTML頁面,如果你下載這麼快你耗盡他們的帶寬網站管理員通常不會幸福。

總之,下載整個網站而不傷害該網站將需要一段時間。

+0

嗨daveb。它確實遵守robots.txt文件,以及多線程沒有一種解決速度問題,現在我只是想找出最有效的方式,以一個多線程的程序,這可能避免錯誤。必須有一個,否則線程的全部要點是什麼。 – Tobias 2009-07-18 01:05:06