2014-04-02 6 views
23

मैं पृष्ठभूमि कार्यों को प्रबंधित करने के लिए अपने Django ऐप (लोचदार बीनस्टॉक पर) में खरगोश एमक्यू के साथ सेलेरी का उपयोग करता हूं और मैंने सुपरवाइजर का उपयोग करके इसे डिमोनिज्ड किया।सेलेरी: वर्कर लॉस्ट एरर: वर्कर समय से बाहर निकल गया: सिग्नल 9 (सिगकिल)

[01/Apr/2014 23:04:03] [ERROR] [celery.worker.job:272] Task clean-dead-sessions[1bfb5a0a-7914-4623-8b5b-35fc68443d2e] raised unexpected: WorkerLostError('Worker exited prematurely: signal 9 (SIGKILL).',) 
Traceback (most recent call last): 
    File "/opt/python/run/venv/lib/python2.7/site-packages/billiard/pool.py", line 1168, in mark_as_worker_lost 
    human_status(exitcode)), 
WorkerLostError: Worker exited prematurely: signal 9 (SIGKILL). 

सभी प्रक्रियाओं पर्यवेक्षक द्वारा प्रबंधित कर रहे हैं: समस्या अब, उस अवधि के काम है कि मैं परिभाषित विफल हो रहा है (के बाद एक सप्ताह है, जिसमें यह ठीक से काम किया) में से एक है, त्रुटि मुझे मिल गया है है है ऊपर और ठीक से चल रहा है (supervisorctl status रनिंग कहते हैं)।

मैंने अपने ec2 इंस्टेंस पर कई लॉग पढ़ने की कोशिश की लेकिन सिगकिल का कारण क्या है यह जानने में कोई भी मेरी मदद करने में प्रतीत नहीं होता है। मुझे क्या करना चाहिए? मैं कैसे जांच कर सकता हूं?

ये मेरी अजवाइन सेटिंग्स हैं:

[program:celery_worker] 
environment=$env_variables 
directory=/opt/python/current/app 
command=/opt/python/run/venv/bin/celery worker -A com.cygora -l info --pidfile=/opt/python/run/celery_worker.pid 
startsecs=10 
stopwaitsecs=60 
stopasgroup=true 
killasgroup=true 
autostart=true 
autorestart=true 
stdout_logfile=/opt/python/log/celery_worker.stdout.log 
stdout_logfile_maxbytes=5MB 
stdout_logfile_backups=10 
stderr_logfile=/opt/python/log/celery_worker.stderr.log 
stderr_logfile_maxbytes=5MB 
stderr_logfile_backups=10 
numprocs=1 

[program:celery_beat] 
environment=$env_variables 
directory=/opt/python/current/app 
command=/opt/python/run/venv/bin/celery beat -A com.cygora -l info --pidfile=/opt/python/run/celery_beat.pid --schedule=/opt/python/run/celery_beat_schedule 
startsecs=10 
stopwaitsecs=300 
stopasgroup=true 
killasgroup=true 
autostart=false 
autorestart=true 
stdout_logfile=/opt/python/log/celery_beat.stdout.log 
stdout_logfile_maxbytes=5MB 
stdout_logfile_backups=10 
stderr_logfile=/opt/python/log/celery_beat.stderr.log 
stderr_logfile_maxbytes=5MB 
stderr_logfile_backups=10 
numprocs=1 

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

CELERY_TIMEZONE = 'UTC' 
CELERY_TASK_SERIALIZER = 'json' 
CELERY_ACCEPT_CONTENT = ['json'] 
BROKER_URL = os.environ['RABBITMQ_URL'] 
CELERY_IGNORE_RESULT = True 
CELERY_DISABLE_RATE_LIMITS = False 
CELERYD_HIJACK_ROOT_LOGGER = False 

एक यह मेरा supervisord.conf है के बाद पुन: प्रारंभ अजवाइन हरा समस्या बनी हुई है :(

2 संपादित करें: killasgroup = true को killasgroup = false में बदल दिया और समस्या बनी हुई है

उत्तर

27

आपके कर्मचारी को प्राप्त सिगकिल को दूसरी प्रक्रिया द्वारा शुरू किया गया था। आपका पर्यवेक्षक कॉन्फ़िगर ठीक दिखता है, और killasgroup केवल पर्यवेक्षक द्वारा शुरू की गई हत्या (उदा। सीटीएल या प्लगइन) को प्रभावित करेगा - और उस सेटिंग के बिना यह प्रेषक को सिग्नल भेज देगा, न कि बच्चे को।

अधिकतर आपके पास मेमोरी रिसाव है और ओएस का ओमकिल्लर खराब व्यवहार के लिए आपकी प्रक्रिया की हत्या कर रहा है।

grep oom /var/log/messages। यदि आप संदेश देखते हैं, तो यह आपकी समस्या है।

आप कुछ भी नहीं मिल रहा है, तो एक खोल में मैन्युअल रूप से समय-समय पर प्रक्रिया चलाने की कोशिश:

MyPeriodicTask().run()

और देखो क्या होता है। यदि आप इस होस्ट के लिए कैक्टस, गैंग्लिया इत्यादि जैसे अच्छे उपकरण नहीं हैं, तो मैं सिस्टम को मॉनिटर करता हूं और किसी अन्य टर्मिनल में मेट्रिक्स को प्रोसेस करता हूं।

+1

आप सही हैं "अजवाइन ओम-किलर का आह्वान किया गया है: gfp_mask = 0x201da, order = 0, oom_adj = 0, oom_score_adj = 0" ... अब मुझे यह पता होना है कि ऐसा क्यों होता है, क्योंकि पहले यह अपेक्षा के अनुसार चल रहा था: पी आपका बहुत बहुत धन्यवाद! – daveoncode

+7

@ डेवोनकोड मुझे लगता है कि लुईस कैरोल ने एक बार लिखा था, "" मेरे बेटे, ओम-किलर से सावधान रहें! जबड़े काटने वाले पंजा, " –

+8

मेरे उबंटू बॉक्स पर चेक करने के लिए लॉग '/ var/log/kern.log' है,'/var/log/messages' –

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