2013-07-08 32 views
12

में कतार स्थिति पर नजर रखने मैं निम्नलिखित सेट अप है:कैसे अजवाइन

  • 100 कार्यकर्ताओं के साथ सामान्य कार्यकर्ता पूल
  • 50 कार्यकर्ताओं के साथ कार्यकर्ता पूल उच्च प्राथमिकता
  • मैं इतनी बड़ी संख्या सबसे क्योंकि इस्तेमाल किया समय अपने कार्यों बहुत लंबे समय समाप्ति के साथ आई/ओ के लिए इंतज़ार कर खर्च की
  • दलाल
  • के रूप में RabbitMQ का उपयोग करना (HTTP अनुरोध है कि प्रतिक्रिया करने के लिए 20 तक का समय लग सकता है कर) मैं init का उपयोग कर एक deamon के रूप में celeryd की स्थापना की है डीडी scripts celery'd GitHub से, निम्नलिखित मानकों के साथ: CELERYD_OPTS="--time-limit=600 -c:low_p 100 -c:high_p 50 -Q:low_p low_priority_queue_name -Q:high_p high_priority_queue_name"

मेरे समस्या है, कभी कभी कतार में "वापस ऊपर" लगता है ... वह यह है कि यह लेने वाली कार्य बंद हो जाएगा। ऐसा लगता है कि इस के लिए परिदृश्यों के लिए कर रहे हैं:

  • दलाल में "अस्वीकृत" संदेशों की धीमी गति का निर्माण हुआ है, भले ही celery inspect active दिखाएगा कि सभी कार्यकर्ताओं तक उपयोग किया जाता है - जो है, मैं सिर्फ होगा कुछ सक्रिय कार्य देखें
  • कतार बिल्डअप के बिना, नए कार्यों का उपभोग करना बंद कर देगा।
  • जब अपने "मृत" राज्य में, कार्यकर्ता पर strace का उपयोग कर प्रक्रियाओं रिटर्न कुछ भी नहीं ... कार्यकर्ता से पूरी तरह से शून्य गतिविधि

मैं पर कोई जानकारी या संकेत का स्वागत करेंगे:

  • कैसे मैं इसे डीबग कर सकता हूं। मैं देख सकता हूं कि कार्यकर्ता प्रक्रियाएं क्या कर रही हैं, यह देखने के लिए मैं strace का उपयोग कर सकता हूं, लेकिन अब तक यह कहने में उपयोगी रहा है कि कार्यकर्ता
  • मैं इसकी निगरानी कैसे कर सकता हूं, और संभवतः ऑटो-रिकवरी कर सकता हूं। अजवाइन (flower और events के प्रबंधन के लिए कई टूल हैं लेकिन वे रीयल-टाइम दोनों उत्कृष्ट हैं - लेकिन कोई स्वचालित निगरानी/खतरनाक कार्यक्षमता नहीं है)। क्या मैं supervisord के साथ अपने स्वयं के निगरानी उपकरण लिखने से बेहतर हूं?

इसके अलावा, मैं Django-अजवाइन

+0

क्या आपने अंततः इस समस्या को हल किया? – bouke

+0

यह पुराना है, लेकिन बैक अप कतारों के दो कारण जिन्हें मैं जानता हूं: (1) आप कार्यों के भीतर कार्य बना रहे हैं। यदि आप ऐसा करते हैं, तो आप अंततः उस बिंदु पर पहुंच जाएंगे जहां आपके पास कार्यकर्ता को कार्य के भीतर कार्य करने के लिए कोई कर्मचारी नहीं है, और आप जमा हो जाएंगे। (2) यदि आप अनुरोधों का उपयोग कर रहे हैं, तो बहुत सारे डाउनलोड या जो भी हो, उसके पास डिफ़ॉल्ट टाइमआउट नहीं है, इसलिए यदि आपके पास डाउनलोड त्रुटि है तो यह पूरी तरह से जमा हो सकता है। एक बार एक कर्मचारी फ्रीज हो जाता है, यह हो गया है। – mlissner

उत्तर

3

@ गोरो से अपने कार्यों को शुरू करने कर रहा हूँ, अगर आप विदेशी सेवाओं के लिए अनुरोध कर रहे हैं, आप के बजाय 100500 श्रमिकों को उत्पन्न करने के gevent or eventlet पूल कार्यान्वयन कोशिश करनी चाहिए। मुझे भी समस्या थी, जब अजवाइन श्रमिक उपभोग करने वाले कार्यों को रोकते थे, तो यह celery+gevent+sentry(raven) संयोजन के साथ एक बग के कारण हुआ था।

एक बात मैं अजवाइन के बारे में पता लगाने की, कि यह किसी भी निगरानी के बिना ठीक काम कर सकता है, तो सब ठीक किया (वर्तमान में मैं कर रहा हूँ> प्रतिदिन 50M कार्य) है, लेकिन अगर ऐसा नहीं है, निगरानी आप मदद नहीं करेगा बहुत ज्यादा। सेलेरी में "आपदा रिकवरी" थोड़ा मुश्किल है, क्योंकि आप उम्मीद करते हैं कि सभी चीजें काम नहीं करेंगी :(

आपको छोटे peaces पर समाधान तोड़ना चाहिए, अलग-अलग कतारों के बीच कुछ कार्य अलग हो सकते हैं। कुछ बिंदु पर, आप कोड स्निपेट ढूंढें जो समस्याएं पैदा करता है।

+1

क्या आपके पास बग रिपोर्ट या इस पर कुछ अन्य जानकारी है "सेलेरी + गीवेंट + सेंड्री (रेवेन) संयोजन" के साथ बग? –

+0

मुझे इस अजवाइन + गीवेंट + सेंड्री (रेवेन) बग के बारे में अधिक सुनने में भी रूचि है – JiminyCricket

+0

@heheimbuerger बस इसे एक संपादन के रूप में जोड़ा गया है! – JiminyCricket

3

मुझे लगता है कि यह श्रमिकों को प्रीफेचिंग कार्यों के कारण है। यदि यह अभी भी एक समस्या है तो आप सेलरी को 3.1 में अपडेट कर सकते हैं और -Ofair कार्यकर्ता विकल्प का उपयोग कर सकते हैं।कॉन्फ़िगरेशन विकल्प जिसे मैंने -Ofair से पहले उपयोग करने का प्रयास किया था CELERYD_PREFETCH_MULTIPLIER था। हालांकि, CELERYD_PREFETCH_MULTIPLIER = 1 (इसका सबसे कम मूल्य) सेट करने से मदद नहीं मिलती है क्योंकि कर्मचारी अभी भी एक कार्य को पहले से ही प्रीफेच कर देंगे।

http://docs.celeryproject.org/en/latest/whatsnew-3.1.html#prefork-pool-improvements और विशेष रूप से http://docs.celeryproject.org/en/latest/whatsnew-3.1.html#caveats देखें।

4

एक बहुत ही बुनियादी कतार घड़ीडॉग केवल एक ही स्क्रिप्ट के साथ कार्यान्वित किया जा सकता है जो हर मिनट क्रॉन द्वारा चलाया जाता है। सबसे पहले, यह एक काम है कि, जब मार डाला (एक कार्यकर्ता में), एक पूर्वनिर्धारित फ़ाइल को छूता बंद आग, उदाहरण के लिए:

with open('/var/run/celery-heartbeat', 'w'): 
    pass 

फिर स्क्रिप्ट है कि फाइल पर संशोधन टाइमस्टैम्प जाँच करता है और, अगर यह एक मिनट से भी अधिक है (या 2 मिनट, या जो कुछ भी) दूर, अलार्म भेजता है और/या श्रमिकों और/या ब्रोकर को पुनरारंभ करता है।

यदि आपके पास एकाधिक मशीनें हैं, तो यह थोड़ा सा ट्रिकियर हो जाता है, लेकिन एक ही विचार लागू होता है।

संबंधित मुद्दे