我最近开始学习网络爬虫,并使用Ruby, Anemone Mongodb 进行存储。我正在可能有数十亿个链接的大型公共网站上对爬虫进行测试。

crawler.rb正在索引正确的信息,尽管当我检查活动监视器中的内存使用时,它显示内存在不断增长。我只将搜寻器运行了大约6-7个小时,内存显示mongod为1.38GB,Ruby进程为1.37GB。似乎每小时大约增长100MB。

似乎我可能有内存泄漏?他们是一种更理想的方式,我可以实现相同的爬网而不会将内存升级到无法控制的程度,从而使它可以运行更长的时间吗? 通用标签

有帮助吗?

解决方案

我对此也有疑问,但是我正在使用redis作为数据存储。

这是我的爬虫: 通用标签

我将此处上的补丁应用到了海葵宝石中的core.rb文件中: 通用标签

...

(下面是第155行) 通用标签

我有一个每小时的cron工作: 通用标签

尝试降低Redis的内存使用量。我现在要重新开始一个巨大的爬网,所以我们看看它如何进行!

我将报告结果...

其他提示

我正在做类似的事情,我想也许您只是在创建数据负载。

您没有保存身体,因此应该有助于记忆需求。

我能想到的唯一其他改进是使用Redis代替Mongo,因为我发现它对于Anemone的存储具有更大的可伸缩性。

检查mongo中数据的大小-我发现我正在保存大量行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top