У моего паука серьезная утечка памяти. Через 15 минут запустите память 5gb, и scrapy сообщает (используя prefs()), что 900k запрашивает объекты и все. Что может быть причиной такого большого количества объектов живых запросов? Запрос только поднимается и не опускается. Все остальные объекты близки к нулю.Утечка памяти падающего луча
Мой паук выглядит следующим образом:
class ExternalLinkSpider(CrawlSpider):
name = 'external_link_spider'
allowed_domains = ['']
start_urls = ['']
rules = (Rule(LxmlLinkExtractor(allow=()), callback='parse_obj', follow=True),)
def parse_obj(self, response):
if not isinstance(response, HtmlResponse):
return
for link in LxmlLinkExtractor(allow=(), deny=self.allowed_domains).extract_links(response):
if not link.nofollow:
yield LinkCrawlItem(domain=link.url)
Здесь выход префов()
HtmlResponse 2 oldest: 0s ago
ExternalLinkSpider 1 oldest: 3285s ago
LinkCrawlItem 2 oldest: 0s ago
Request 1663405 oldest: 3284s ago
памяти для 100k Царапины страницы могут ударить 40gb отметки на некоторых сайтах (например, на victorinox.com это до 35 ГБ памяти на отметке 100 тыс. царапин). На другом его гораздо меньше.
UPD.
В-третьих - мой код ограничен одним доменом. Но домен может быть любым. Im настраивает разрешенные домены динамически, поэтому im захватывает только один домен за раз. Что касается печенья - хорошая точка. Постоянная очередь - я сказал в группе пользователей scrapy, что они очень медленны с большим количеством запросов, поэтому его не вариант :( – Aldarund
Хорошо, что не было показано в вашем коде, поэтому я упоминал об этом! Постоянная очередь медленный, хотя, и он больше подходит для приостановки/возобновления очередей. Я считаю, что разница в скорости действительно является памятью против диска. – Rejected
Я даже установил очередь FifoMemoryQueue, но все же самый старый объект запроса почти такой же старый, как у паука объект. Не должен ли он быть обработан и освобожден? – Aldarund