如何处理爬虫下载大的文件导致的内存溢出

如何避免爬虫下载大的文件导致的内存溢出
爬虫抓取网页的时候,如果网页指向的是一个下载文件。

那么如何才能避免下载这个文件呢?

文件大的话会导致Java heap space不足错误。
 

1,我在扩展url的时候,先判断生成url的后缀,将直接指向的比如.doc/.rmvb等等,则该url不加入队列。

2,在抓取单个网页的时,再加上了httpURLConnection.getContentLength()限制,当返回的大小大于3M时就不抓该网页。

但还是遇到java.lang.OutOfMemoryError: Java heap space错误。


各位有啥方法?

------解决方案--------------------
方法 1 不一定有效。很多情况下用于“下载文件”的 url 并不一定有“扩展名”在 url 里。如果你想“按内容类型区别对待”的话,应该还是要通过 header 里的 ContentType 想办法。

方法 2 的保护按说应该是有效的,只是我不敢肯定是不是所有的 HTTP Response 都设置了有效的 ContentLength 值。

最好还是能够以类似 listener 的方式切入到传输的过程中,这样,只要累计到一定尺寸就中止。具体的方法我没做过,不清楚。
------解决方案--------------------
Heritrix里控制得很好,对于获得URL的二进制数据,进行统一管理。
每个URL都配置一个缓冲池,从缓冲池不断的将其数据写入本地临时文件。
如此不仅可以控制内存,并且还可以控制宽带使用情况。
建议看下他的源码。