2011-06-15 26 views
7

ईसी 2 उपभोग करने वाले टोन पर खरगोश एमक्यू मैं सेलरी और डीजेगो के साथ खरगोश एमक्यू प्राप्त करने की कोशिश कर रहा हूं ताकि कुछ सुंदर मूल पृष्ठभूमि प्रक्रिया करने के लिए ईसी 2 उदाहरण पर जा सके। मैं एक बड़े ईसी 2 उदाहरण पर rabbitmq-server 2.5.0 चला रहा हूँ।सीसी

मैंने here (पृष्ठ के बहुत नीचे) निर्देशों के अनुसार परीक्षण क्लाइंट को डाउनलोड और स्थापित किया। मैं सिर्फ परीक्षण स्क्रिप्ट जाना दे दिया है और उम्मीद उत्पादन हो रही है:

पीआईडी ​​उपयोगकर्ता पीआर एनआई VIRT आरईएस SHR एस:

recving rate: 2350 msg/s, min/avg/max latency: 588078478/588352905/588588968 microseconds 
recving rate: 1844 msg/s, min/avg/max latency: 588589350/588845737/589195341 microseconds 
recving rate: 1562 msg/s, min/avg/max latency: 589182735/589571192/589959071 microseconds 
recving rate: 2080 msg/s, min/avg/max latency: 589959557/590284302/590679611 microseconds 

समस्या यह है कि CPU के एक अविश्वसनीय राशि लेने वाली है % सीपीयू% सदस्य समय + Command
668 RabbitMQ 20 0 618m 506m 2340 एस 166 6.8 2: 31.53 beam.smp
1301 ubuntu 20 0 2142m 90 मिलियन से 9128 एस 17 1.2 0: 24.75 जावा

मैं पहले एक माइक्रो उदाहरण पर परीक्षण कर रहा था और यह पूरी तरह से उदाहरण पर सभी संसाधनों का उपभोग कर रहा था।

क्या यह उम्मीद की जा सकती है? क्या मुझसे कुछ गलत हो रही है?

धन्यवाद।

संपादित करें:

इस पोस्ट के लिए असली कारण यह है कि celerybeat थोड़ी देर के लिए ठीक से चलाने के लिए लग रहा था और फिर अचानक प्रणाली पर सभी संसाधनों का उपभोग किया गया था। मैंने rabbitmq management tools स्थापित किया है और यह जांच कर रहा है कि कैसे सेलेरी से और खरगोश परीक्षण सूट से कतार बनाई जाती है। ऐसा लगता है कि अजवाइन इन कतारों को अनाथ कर रहा है और वे दूर नहीं जा रहे हैं।

यहां परीक्षण सूट द्वारा उत्पन्न कतार है। एक कतार बनाई गई है और सभी संदेशों इसे में जाने के लिए और बाहर आने के: enter image description here

Celerybeat यह कार्य चलाता है हर बार के लिए एक नया कतार बनाता है: enter image description here

यह सच करने के लिए स्वत: हटाने पैरामीटर सेट करता है, लेकिन मुझे पूरी तरह से यकीन नहीं है कि ये कतार हटा दी जाएंगी। वे धीरे-धीरे धीरे-धीरे निर्माण और संसाधन खाते हैं।

क्या किसी के पास कोई विचार है?

धन्यवाद।

उत्तर

6

ठीक है, मैंने इसे समझ लिया।

यहाँ प्रलेखन का प्रासंगिक टुकड़ा है: http://readthedocs.org/docs/celery/latest/userguide/tasks.html#amqp-result-backend

पुरानी परिणाम स्वचालित रूप से साफ नहीं किया जाएगा, ताकि आप परिणाम वरना कतारों की संख्या का उपभोग करने के अंत में नियंत्रण से बाहर जाना होगा यकीन करना चाहिए। यदि आप RabbitMQ 2.1.1 या उच्चतर चला रहे हैं तो आप एक्स-एक्सपेयर तर्क का कतार में लाभ उठा सकते हैं, जो अप्रयुक्त होने के बाद निश्चित समय सीमा के बाद कतार समाप्त कर देगा। कतार समाप्ति CELERY_AMQP_TASK_RESULT_EXPIRES सेटिंग (डिफ़ॉल्ट रूप से सक्षम नहीं) द्वारा सेट की जा सकती है (सेकेंड में)।

+1

अगला सेलेरी संस्करण (2.3.0) डिफ़ॉल्ट रूप से परिणाम बैकएंड नहीं होगा। इसे और अधिक सचेत विकल्प बनाना, इसलिए इन तरह के नुकसान से बचा जा सकता है। – asksol

+1

कृपया लिंक अपडेट करें, पृष्ठ मौजूद नहीं है – lfender6445

2

अपने ही समस्या का Eric Conner's समाधान के लिए जोड़ने के लिए, http://docs.celeryproject.org/en/latest/userguide/tasks.html#tips-and-best-practices कहता है:

परिणाम पर ध्यान न दें आप

नहीं करना चाहती आप किसी कार्य के परिणाम के बारे में परवाह नहीं करते हैं , ignore_result विकल्प सेट करना सुनिश्चित करें, परिणाम कचरे के समय और संसाधनों को संग्रहीत करने के रूप में।

@app.task(ignore_result=True) 
def mytask(…): 
    something() 

परिणाम CELERY_IGNORE_RESULT सेटिंग का उपयोग करके विश्व स्तर पर अक्षम भी हो सकते हैं।

कि एरिक के उत्तर के साथ शायद आपके परिणाम बैकएंड के प्रबंधन के लिए न्यूनतम न्यूनतम अभ्यास है।

यदि आपको परिणाम बैकएंड की आवश्यकता नहीं है, तो CELERY_IGNORE_RESULT सेट करें या परिणाम बैकएंड सेट न करें। यदि आपको परिणाम बैकएंड की आवश्यकता है, तो अप्रयुक्त परिणामों के निर्माण के विरुद्ध सुरक्षा के लिए CELERY_AMQP_TASK_RESULT_EXPIRES सेट करें। यदि आपको किसी विशिष्ट ऐप के लिए इसकी आवश्यकता नहीं है, तो उपरोक्त के रूप में स्थानीय अनदेखा सेट करें।

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