2011-06-13 12 views
5

मैं बैकएंड के रूप में RabbitMQ 2.1.1 का उपयोग करके सेलेरी 2.2.4/डीजेसेलरी 2.2.4 चला रहा हूं। मैंने हाल ही में ऑनलाइन दो नए सेलेरी सर्वर लाए हैं - मैं दो मशीनों में दो श्रमिकों को कुल ~ 18 धागे और मेरे नए सूप वाले बक्से (36 जी रैम + डुअल हाइपर-थ्रेडेड क्वाड-कोर) पर चला रहा था, मैं 10 रनिंग कर रहा हूं कुल 180 धागे के लिए प्रत्येक 8 धागे वाले श्रमिक - मेरे कार्य बहुत छोटे हैं इसलिए यह ठीक होना चाहिए।अजवाइन। डेले लटकता है (हाल ही में, कोई समस्या नहीं है)

पिछले कुछ दिनों से नोड्स ठीक चल रहे हैं, लेकिन आज मैंने देखा कि .delaay() लटक रहा है। जब मैं इसमें बाधा डालते हैं, मैं एक ट्रैस कि यहाँ अंक देखें:

File "/home/django/deployed/releases/20110608183345/virtual-env/lib/python2.5/site-packages/celery/task/base.py", line 324, in delay 
    return self.apply_async(args, kwargs) 
File "/home/django/deployed/releases/20110608183345/virtual-env/lib/python2.5/site-packages/celery/task/base.py", line 449, in apply_async 
    publish.close() 
File "/home/django/deployed/virtual-env/lib/python2.5/site-packages/kombu/compat.py", line 108, in close 
    self.backend.close() 
File "/home/django/deployed/virtual-env/lib/python2.5/site-packages/amqplib/client_0_8/channel.py", line 194, in close 
    (20, 41), # Channel.close_ok 
File "/home/django/deployed/virtual-env/lib/python2.5/site-packages/amqplib/client_0_8/abstract_channel.py", line 89, in wait 
    self.channel_id, allowed_methods) 
File "/home/django/deployed/virtual-env/lib/python2.5/site-packages/amqplib/client_0_8/connection.py", line 198, in _wait_method 
    self.method_reader.read_method() 
File "/home/django/deployed/virtual-env/lib/python2.5/site-packages/amqplib/client_0_8/method_framing.py", line 212, in read_method 
    self._next_method() 
File "/home/django/deployed/virtual-env/lib/python2.5/site-packages/amqplib/client_0_8/method_framing.py", line 127, in _next_method 
    frame_type, channel, payload = self.source.read_frame() 
File "/home/django/deployed/virtual-env/lib/python2.5/site-packages/amqplib/client_0_8/transport.py", line 109, in read_frame 
    frame_type, channel, size = unpack('>BHI', self._read(7)) 
File "/home/django/deployed/virtual-env/lib/python2.5/site-packages/amqplib/client_0_8/transport.py", line 200, in _read 
    s = self.sock.recv(65536) 

मैं खरगोश लॉग देख लिया है, और मैं इसे प्रक्रिया के रूप में जुड़ने की कोशिश कर देखें:

=INFO REPORT==== 12-Jun-2011::22:58:12 === 
accepted TCP connection on 0.0.0.0:5672 from x.x.x.x:48569 

मैं अपने अजवाइन है लॉग इन करें INFO करने के लिए सेट स्तर है, लेकिन मैं कुछ भी अजवाइन लॉग में विशेष रूप से दिलचस्प श्रमिकों की है कि 2 छोड़कर नहीं देख दलाल कनेक्ट नहीं कर सकता है:

[2011-06-12 22:41:08,033: ERROR/MainProcess] Consumer: Connection to broker lost. Trying to re-establish connection... 

अन्य नोड्स के सभी की गिरफ्तारी ई मुद्दे के बिना कनेक्ट करने में सक्षम है।

मुझे पता है कि एक समान प्रकृति के पिछले वर्ष एक पोस्टिंग (RabbitMQ/Celery with Django hangs on delay/ready/etc - No useful log info) थी, लेकिन मुझे पूरा यकीन है कि यह अलग है। क्या यह हो सकता है कि श्रमिकों की संख्या बहुत अधिक amqplib में दौड़ की स्थिति बना रही है - मुझे this धागा मिला जो इंगित करता है कि amqplib थ्रेड-सुरक्षित नहीं है, यह सुनिश्चित नहीं है कि यह सेलेरी के लिए मायने रखता है।

संपादित करें: मैं celeryctl purge दोनों नोड्स पर की कोशिश की है - एक यह सफल होता है पर है, लेकिन अन्य पर यह निम्नलिखित AMQP त्रुटि के साथ विफल:

AMQPConnectionException(reply_code, reply_text, (class_id, method_id)) 
    amqplib.client_0_8.exceptions.AMQPConnectionException: 
    (530, u"NOT_ALLOWED - cannot redeclare exchange 'XXXXX' in vhost 'XXXXX' 
    with different type, durable or autodelete value", (40, 10), 'Channel.exchange_declare') 

दोनों नोड्स पर, inspect stats साथ लटका हुआ है उपरोक्त ट्रेसबैक "कनेक्शन बंद नहीं कर सकता"। मैं यहाँ एक नुकसान में हूँ।

EDIT2:। मैं camqadm से exchange.delete का उपयोग कर हमलावर मुद्रा को नष्ट करने में सक्षम था और अब दूसरे नोड भी लटकी हुई है :(

EDIT3: एक चीज़ जो भी हाल ही में बदल कि मैं एक अतिरिक्त जोड़ा है vhost RabbitMQ के लिए है, जो मेरी मचान नोड को जोड़ता है

उत्तर

4

उम्मीद है कि इस किसी बहुत समय की बचत होगी ... हालांकि यह निश्चित रूप से मुझे किसी भी परेशानी को बचाने नहीं करता है:।

/var खरगोश चला रहे सर्वर पर भरा था। मेरे द्वारा जोड़े गए सभी नोड्स के साथ, खरगोश बहुत अधिक लॉगिंग कर रहा था और यह /var भर गया - मैं /var/lib/rabbitmq पर नहीं लिख सका, और इसलिए कोई संदेश नहीं चल रहा था।

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