celery -A proj report
في الإصدار.master
.تم تطوير تطبيقي باستخدام django1.11 و celery4.1 [sqs]. يتم نشره على Amazon AWS من خلال Elastic Beanstalk. AWS SQS هو الوسيط.
تظهر المشكلة كل ليلة حوالي الساعة 10:42 مساءً ، وتستمر لمدة ساعة تقريبًا. يبدأ تنفيذ عشرات الآلاف من مهام backend_cleanup. وفقًا لقائمة نتائج المهام في المسؤول ، يتم تنفيذ كل مهمة بنجاح. يظل استخدام وحدة المعالجة المركزية في بعض الأحيان عند 100٪. يصعب فتح كل صفحة من صفحات التطبيق. بعد ساعة واحدة من حدوث المشكلة ، عاد استخدام وحدة المعالجة المركزية إلى طبيعته. ومع ذلك ، فإن قوائم الانتظار آسفين. لا يمكن تنفيذ أي مهام تأخير (). لا بد لي من مسح قائمة الانتظار في SQS ، وإعادة تشغيل التطبيق ، وإعادة تحميل الكود بالكامل إلى AWS Elastic Beanstalk. ثم سيتم تنفيذ مهام التأخير () بشكل طبيعي. إذا لم أقم بالمسح أو إعادة البدء أو إعادة التحميل ، فلن يتم تنفيذ أي من المهام غير المتزامنة. حتى مهمة التنظيف الخلفية المضمنة لا يمكن أن تبدأ. لا يحتوي تطبيقي على أي مهام دورية أو مهام crontab باستثناء مهمة celery.backend_cleanup المضمنة. هل يمكن لأي شخص مساعدتي في هذه المشكلة؟
أحتاج إلى تشغيل التطبيق بالكامل بشكل طبيعي بعد انتهاء مهام backend_cleanup.
موضح في ## خطوات التكاثر
لقد وجدت للتو أن المشكلة ربما تتعلق بالمهمة المضمنة ، celery.backend_cleanup. لقد قمت بتشغيل التطبيق في بيئة التطوير المحلي. عندما كانت الساعة 10:42 مساءً ، بدأت مهام backend_cleanup الهائلة ونُفذت بنجاح. ومع ذلك ، بعد بضع ثوان ، حدث خطأ. ها هو الخطأ.
[2017-10-23 22:51:27,677: CRITICAL/MainProcess] Unrecoverable error: Exception('Request Empty body HTTP 599 Server aborted the SSL handshake (None)',)
Traceback (most recent call last):
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/celery/worker/worker.py", line 203, in start
self.blueprint.start(self)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/celery/bootsteps.py", line 119, in start
step.start(parent)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/celery/bootsteps.py", line 370, in start
return self.obj.start()
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/celery/worker/consumer/consumer.py", line 320, in start
blueprint.start(self)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/celery/bootsteps.py", line 119, in start
step.start(parent)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/celery/worker/consumer/consumer.py", line 596, in start
c.loop(*c.loop_args())
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/celery/worker/loops.py", line 88, in asynloop
next(loop)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/kombu/async/hub.py", line 354, in create_loop
cb(*cbargs)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/kombu/async/http/curl.py", line 111, in on_readable
return self._on_event(fd, _pycurl.CSELECT_IN)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/kombu/async/http/curl.py", line 124, in _on_event
self._process_pending_requests()
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/kombu/async/http/curl.py", line 132, in _process_pending_requests
self._process(curl, errno, reason)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/kombu/async/http/curl.py", line 178, in _process
buffer=buffer, effective_url=effective_url, error=error,
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/vine/promises.py", line 150, in __call__
svpending(*ca, **ck)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/vine/promises.py", line 143, in __call__
return self.throw()
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/vine/promises.py", line 140, in __call__
retval = fun(*final_args, **final_kwargs)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/vine/funtools.py", line 100, in _transback
return callback(ret)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/vine/promises.py", line 143, in __call__
return self.throw()
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/vine/promises.py", line 140, in __call__
retval = fun(*final_args, **final_kwargs)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/vine/funtools.py", line 98, in _transback
callback.throw()
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/vine/funtools.py", line 96, in _transback
ret = filter_(*args + (ret,), **kwargs)
File "/Users/user/code/accusize-021/lib/python3.4/site-packages/kombu/async/aws/connection.py", line 253, in _on_status_ready
raise self._for_status(response, response.read())
Exception: Request Empty body HTTP 599 Server aborted the SSL handshake (None)
وفي الوقت نفسه ، اختفت قائمة الانتظار من AWS SQS. ثم استمر تنفيذ عدد قليل من مهام backend_cleanup. وأخيرًا ، ظهر تحذير.
[2017-10-23 22: 51: 28،967: تحذير / العملية الرئيسية] استعادة 10 رسائل غير معترف بها
وأخيرًا ، توقف اتصال HTTPS بقائمة انتظار SQS. تعذر على التطبيق إعادة الاتصال بـ SQS ما لم أعد نشر التطبيق على AWS Elastic Beanstalk.
هل يمكن لأي شخص مساعدتي في هذه المشكلة؟ سيكون موضع تقدير كبير أي رد.
أعتقد أنني حللت المشكلة. لا تحدث المشكلة أبدًا بعد أن قمت بتغيير CELERY_RESULT_BACKEND إلى "redis" من "django-db" ، وتغيير CELERY_TIMEZONE إلى "UTC". على الرغم من أن نتائج المهمة في Django Admin توقفت عن إضافة أي نتائج مهمة ، فقد تم حل مشكلتي بشكل كبير.
يمكنك ببساطة استبدال الجدول الزمني وتجنب استخدام crontab:
'celery.backend_cleanup': {
'task': 'celery.backend_cleanup',
'schedule': 86400, # every 24 hours instead of crontab('0', '4', '*') which is used in celery beat
'options': {'expires': 12 * 3600}}
,
التعليق الأكثر فائدة
يمكنك ببساطة استبدال الجدول الزمني وتجنب استخدام crontab:
'celery.backend_cleanup': { 'task': 'celery.backend_cleanup', 'schedule': 86400, # every 24 hours instead of crontab('0', '4', '*') which is used in celery beat 'options': {'expires': 12 * 3600}} ,