मैं बैकएंड के रूप में 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 के लिए है, जो मेरी मचान नोड को जोड़ता है