2009-11-28 2 views
13

असल में, मेरे पास 30,000 यूआरएल की एक सूची है। स्क्रिप्ट यूआरएल के माध्यम से जाती है और उन्हें डाउनलोड करती है (बीच में 3 सेकंड देरी के साथ)। और फिर यह डेटाबेस को HTML में संग्रहीत करता है।मेरी पायथन लिपि यादृच्छिक रूप से क्यों मारे जाती है?

और यह लूप और लूप ...

क्यों यह बेतरतीब ढंग से "मारे गए।" होता है? मैंने कुछ भी स्पर्श नहीं किया।

संपादित करें: यह मेरी लिनक्स मशीनों में से 3 पर होता है। मशीनें 256 एमबी मेमोरी के साथ रैकस्पेस क्लाउड पर हैं। और कुछ नहीं चल रहा है।

+0

यह शायद माहौल में अपनी स्क्रिप्ट चल रहा है के बारे में जानकारी प्रदान करने के लिए उपयोगी होगा मिल जाएगा। उदाहरण के लिए, क्या आप इसे अपने सर्वर, या साझा होस्ट पर चला रहे हैं? क्या अन्य चीजें चल रही हैं? आदि ... – Amber

+6

एक त्रुटि ट्रेसबैक सहायक होगा। अन्यथा, हम बस अनुमान लगा रहे हैं। मैं अनुमान लगा रहा हूं कि यह क्षेत्र 51 से लाश है। –

+0

कोई त्रुटि नहीं है। यह सिर्फ "मारे गए" कहते हैं। – TIMEX

उत्तर

18

ऐसा लगता है कि आप स्मृति से बाहर हो रहे हैं - यदि आपके पास "रिसाव" है (उदाहरण के लिए, परिपत्र संदर्भ जमा करने के कारण) लंबे समय से चलने वाले कार्यक्रम पर आसानी से हो सकता है। क्या रैकस्पेस किसी प्रक्रिया की स्मृति का ट्रैक रखने के लिए किसी भी आसानी से उपयोग करने योग्य टूल प्रदान करता है, तो आप यह पुष्टि कर सकते हैं कि यह मामला है या नहीं? अन्यथा, प्रक्रिया के बाहर से सामान्य लिनक्स उपकरणों के साथ इस तरह की चीज की निगरानी करना मुश्किल नहीं है। एक बार जब आप यह निर्धारित कर लें कि "स्मृति से बाहर" मृत्यु का संभावित कारण है, तो pympler जैसे पायथन-विशिष्ट उपकरण आपको यह पता लगाने में सहायता कर सकते हैं कि समस्या कहां से आ रही है (और इस प्रकार यह निर्धारित करना है कि उन संदर्भों से कैसे बचें - इसे बदलकर उन्हें कमजोर संदर्भ, या अन्य सरल दृष्टिकोण - या अन्यथा लीक को हटा दें)।

+0

मुझे लगता है कि यह स्मृति से बाहर हो रहा है, है ना? मेम: 262364k कुल, 258264k प्रयुक्त, 4100k मुक्त, 884k बफर स्वैप: 524280k कुल, 285204k प्रयुक्त, 239076k मुक्त, 14568k कैश – TIMEX

+1

SWAP ऊपर और ऊपर रहता रहता है। – TIMEX

+0

@alex, तो निश्चित रूप से यह एक "रिसाव" जैसा दिखता है। पंपप्लर के अलावा, जिसे मैंने पहले ही सुझाव दिया है, guppy - http://guppy-pe.sourceforge.net/ - वे आपको इंगित करने में मदद कर सकते हैं ** ** ** वह सारी यादें चल रही हैं (आपके कोड को देखकर, जिसे आपने पोस्ट किया था एक और सवाल, आप जिस तीसरे पक्ष के पुस्तकालयों का उपयोग कर रहे हैं, उनके बारे में जानने के बिना, कहीं भी सहायक नहीं है!)। –

1

क्या यह संभव है कि यह एक अपवाद अपवाद है? क्या आप इसे खोल से चला रहे हैं, या यह क्रॉन से या किसी अन्य स्वचालित तरीके से चलाया जा रहा है? यदि यह स्वचालित हो, तो आउटपुट कहीं भी प्रदर्शित नहीं हो सकता है।

14

इस तरह के मामलों में, आपको लॉग फ़ाइलों की जांच करनी चाहिए।

मैं Debian और Ubuntu का उपयोग करें, तो मेरे लिए मुख्य लॉग फ़ाइल है: /var/log/syslog

आप रेड हैट का उपयोग करते हैं, मुझे लगता है कि लॉग है: /var/log/messages

कुछ होता है कि के रूप में के रूप में असाधारण है कर्नेल आपकी प्रक्रिया को मार रहा है, वहां एक समझाए गए एक लॉग इवेंट होंगे।

मुझे संदेह है कि आपको Out Of Memory Killer द्वारा मारा जा रहा है।

1

क्या आप किसी प्रकार के कतार प्रबंधक या प्रक्रिया प्रबंधक का उपयोग कर रहे हैं? जब मैं बैच कतार प्रबंधक का उपयोग कर रहा था तो मुझे स्पष्ट रूप से यादृच्छिक मारे गए संदेश मिल गए थे जब समय समाप्त हो गया था SIGUSR2 भेज रहा था।

अन्यथा मैं दृढ़ता से स्मृति विकल्प से बाहर का पक्ष लेता हूं।

0

जो लोग mysql साथ यहाँ आया के लिए, मैंने पाया यह जवाब सहायक द्वारा मई: के रूप में द्वारा this

conn = MySQLdb.connect(host=DB_HOST, user=DB_USER, db=DB_NAME, 
         passwd=DB_PASSWORD, charset="utf8", 
         cursorclass=MySQLdb.cursors.SSCursor) 

suggented

उपयोग SSCursor और कर्सर पुनरावृति के रूप में this

cursor = conn.cursor() 
cursor.execute("select * from very_big_table;")  
for row in cur: 
    # do what you want here 
    pass 
ने सुझाव दिया

doc पर ध्यान देंपर ध्यान दें, इसलिए यदि आप लिख सकते हैं और चाहते हैं एक ही समय, आप एक और कनेक्शन का उपयोग करना चाहिए, या आप

`_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now")`