1

我的 scrapyd 每天同时处理 200 只蜘蛛。昨天,服务器崩溃了,因为 RAM 达到了上限。

我正在使用scrapyd默认设置

[scrapyd]
http_port  = 6800
debug      = off
#max_proc  = 1
eggs_dir   = /var/lib/scrapyd/eggs
dbs_dir    = /var/lib/scrapyd/dbs
items_dir  = /var/lib/scrapyd/items
logs_dir   = /var/log/scrapyd

这是安排所有蜘蛛的代码:

url = 'http://localhost:6800/schedule.json'
crawler = self.crawler_process.create_crawler()
crawler.spiders.list()
for s in crawler.spiders.list():
    values = {'project' : 'myproject', 'spider' : s}
    data = urllib.urlencode(values)
    req = urllib2.Request(url, data)
    response = urllib2.urlopen(req)

如何优化 scrapyd 设置以处理 200 多个蜘蛛?

谢谢

4

1 回答 1

3

我首先尝试在这些蜘蛛上使用 --profile 选项运行 scrapy crawl 并检查结果以查看占用大部分内存的内容,一般来说,scrapy 应该只是管道和存储数据,而不应该在内存中累积数据。

否则,scrapyd 默认会运行 4 个进程,可以通过以下设置参数进行调整

max_proc 将启动的最大并发 Scrapy 进程数。如果未设置或为 0,它将使用系统中可用的 cpu 数量乘以 max_proc_per_cpu 选项中的值。默认为 0。

max_proc_per_cpu 每个 cpu 将启动的最大并发 Scrapy 进程数。默认为 4。

于 2013-12-16T19:23:47.563 回答