繁体   English   中英

如何处理Java Web爬网程序中多个线程的内存不足错误

[英]How to handle OUT OF MEMORY error for multiple threads in a Java Web Crawler

我是编程的新手,正在为我的Web爬虫撰写论文。 我已经由网络爬虫提供了服务,但是我发现它太慢了,因为它是单线程的。 花费了30分钟来抓取1000个网页。 我尝试创建多个线程来执行,同时使用20个线程同时运行1000个网页仅用了2分钟。 但是现在我遇到了“堆内存不足”错误。 我确定我做错了,这是为20个线程创建一个for循环。 在不显示错误的情况下,对Java搜寻器进行多线程处理的正确方法是什么? 说到哪个,多线程解决了我的问题?

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

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

简单的答案(请参见上文)是增加JVM内存大小。 这将有所帮助,但实际的问题很可能是您的Web爬网算法正在创建内存中的数据结构,该结构与您访问的页面数成正比。 如果是这样,解决方案可能是将该数据结构中的数据移动到磁盘上。 例如数据库。

解决问题的最合适方法取决于网络搜寻器的工作方式,正在收集的内容以及需要搜寻的页面数量。

关于程序的速度:

如果您的网络爬虫遵循服务器上的robots.txt文件(应避免被站点管理员禁止),那么可能几乎无能为力。

您应该对程序进行概要分析,但是我希望大多数时候都是您的爬虫在下载html页面,并且如果您下载得如此之快而耗尽其带宽,站点管理员通常会不满意。

总而言之,下载整个站点而不损害该站点将花费一些时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM