मेरे मकड़ी में गंभीर मेमोरी लीक है .. 15 मिनट के बाद इसकी मेमोरी 5 जीबी और स्केपर बताती है (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 स्क्रैप के लिए मेमोरी पृष्ठों (उदाहरण के लिए victorinox.com पर कुछ साइटों पर 40gb निशान हिट कर सकते हैं यह 100k स्क्रैप किए गए पृष्ठों के निशान पर 35 जीबी मेमोरी तक पहुंचें)। दूसरे पर यह बहुत कम है।
यूपीडी।
तीसरा - मेरा कोड एक डोमेन तक सीमित है। लेकिन डोमेन किसी भी द्वारा कर सकते हैं। आईएम सेटिंग ने डोमेन को गतिशील रूप से अनुमति दी है, इसलिए मैं एक समय में केवल एक डोमेन को पकड़ रहा हूं। कुकीज़ के लिए - अच्छा बिंदु। निरंतर कतार - मैंने स्केपर उपयोगकर्ता समूह में बताया है कि वे बड़ी संख्या में अनुरोधों के साथ बहुत धीमे हैं, इसलिए यह कोई विकल्प नहीं है :( – Aldarund
ठीक है, जो आपके कोड में नहीं दिखाया गया था, यही कारण है कि मैंने इसका उल्लेख किया! निरंतर कतार है धीमा, हालांकि, और यह पंक्तियों को रोकने/फिर से शुरू करने के लिए और अधिक डिज़ाइन किया गया है, मुझे विश्वास है। इस उदाहरण में गति अंतर वास्तव में मेमोरी बनाम डिस्क है। – Rejected
मैं भी एक FifoMemoryQueue कतार सेट करता हूं लेकिन अभी भी सबसे पुराना अनुरोध ऑब्जेक्ट स्पाइडर जितना पुराना है ऑब्जेक्ट। इसे संसाधित नहीं किया जाना चाहिए और जारी किया जाना चाहिए? – Aldarund