如何处理Java Web Crawler中多个线程的OUT OF MEMORY错误

时间:2009-07-18 00:10:29

标签: java out-of-memory

我对编程很新,我正在为网络爬虫工作。我是由网络爬虫提供的,但我发现它太慢,因为它是单线程的。需要30分钟才能抓取1000个网页。我尝试创建多个线程来执行,同时运行1000个网页的20个线程只用了2分钟。但现在我遇到了“堆内存不足”的错误。我确定我所做的是错误的,它为20个线程创建了一个 for 循环。在不给出错误的情况下多线程java爬虫的正确方法是什么?说到这个问题,是不是解决了我的问题的解决方案?

3 个答案:

答案 0 :(得分:3)

我的第一个建议是增加JVM的堆大小:

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

答案 1 :(得分:3)

简单的答案(见上文)是增加JVM内存大小。这将有所帮助,但真正的问题可能是您的Web爬网算法正在创建内存数据结构,该结构与您访问的页面数量成比例增长。如果是这种情况,解决方案可能是将该数据结构中的数据移动到光盘;例如一个数据库。

最适合您的问题的解决方案取决于您的网络抓取工具的工作方式,收集的内容以及您需要抓取的网页数量。

答案 2 :(得分:0)

关于程序的速度:

如果您的网络抓取工具服从服务器上的robots.txt文件(应该避免被网站管理员禁止),那么可能无法做到。

您应该对您的程序进行概要分析,但我希望大部分时间都是您的抓取工具下载html页面,如果您下载速度过快,网站管理员通常会感到不高兴。

总之,在不损害该网站的情况下下载整个网站需要一段时间。