Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理Java Web爬虫中多个线程的内存不足错误_Java_Out Of Memory - Fatal编程技术网

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

如何处理Java Web爬虫中多个线程的内存不足错误,java,out-of-memory,Java,Out Of Memory,我对编程相当陌生,正在为我的关于网络爬虫的论文工作。我已经提供了一个网络爬虫,但我发现它太慢,因为它是单线程。抓取1000个网页需要30分钟。我尝试创建多个线程来执行,20个线程同时运行1000个网页只需2分钟。但现在我遇到了“内存不足”的错误。我确信我所做的是错误的,那就是为20个线程创建一个for循环。在不给出错误的情况下对java爬虫执行多线程操作的正确方法是什么?说到这里,多线程是否是我问题的解决方案?我的第一个建议是增加JVM的堆大小: 关于程序的速度: 如果您的网络爬虫遵守服务器上的

我对编程相当陌生,正在为我的关于网络爬虫的论文工作。我已经提供了一个网络爬虫,但我发现它太慢,因为它是单线程。抓取1000个网页需要30分钟。我尝试创建多个线程来执行,20个线程同时运行1000个网页只需2分钟。但现在我遇到了“内存不足”的错误。我确信我所做的是错误的,那就是为20个线程创建一个for循环。在不给出错误的情况下对java爬虫执行多线程操作的正确方法是什么?说到这里,多线程是否是我问题的解决方案?

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


关于程序的速度:

如果您的网络爬虫遵守服务器上的robots.txt文件(为了避免被网站管理员禁止,它应该遵守该文件),那么可能没有什么可以做的

你应该分析你的程序,但我想大部分时间是你的爬虫下载html页面,如果你下载得太快,耗尽了他们的带宽,网站管理员通常不会高兴

总之,下载整个站点而不损害该站点需要一段时间。

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


最合适的解决方案取决于网络爬虫的工作方式、收集的内容以及需要爬网的页面数量

你好,达维。它确实遵守robots.txt文件,多线程确实解决了速度问题,现在我只想找到一个多线程程序最有效的方法,可以避免错误。必须有一个,否则线程的全部意义是什么。