celery -A proj report
.master
Celery.Мое приложение разработано с использованием django1.11 и celery4.1 [sqs]. Он развертывается на Amazon AWS через Elastic Beanstalk. AWS SQS - брокер.
Проблема появляется каждую ночь около 22:42 и длится около 1 часа. Начинают выполняться десятки тысяч задач backend_cleanup. Согласно списку результатов задачи в админке, каждая задача выполняется успешно. Использование ЦП иногда остается на уровне 100%. Каждая страница приложения открывается с трудом. Через 1 час после возникновения проблемы загрузка ЦП вернулась в норму. Однако очереди расклиниваются. Никакие задачи delay () не могут быть выполнены. Мне нужно очистить очередь в SQS, перезапустить приложение и повторно загрузить весь код в AWS Elastic Beanstalk. Тогда задачи delay () будут выполняться нормально. Если я не сделаю очистку, перезапуск или повторную загрузку, ни одна из асинхронных задач не будет выполнена. Даже встроенная задача backendcleaup не может запуститься. В моем приложении нет периодических задач или задач crontab, кроме встроенной задачи celery.backend_cleanup. Может ли кто-нибудь помочь мне с этой проблемой?
Мне нужно, чтобы все приложение работало нормально после завершения задач backend_cleanup.
Описано в ## Шагах по воспроизведению
Я только что обнаружил, что проблема, вероятно, во встроенной задаче celery.backend_cleanup. Я только что запустил приложение в локальной среде разработки. Когда было 22: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: WARNING / MainProcess] Восстановление 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}} ,