celery -A proj report
の出力を問題に含めました。master
ブランチに対して存在することを確認しました。私のアプリはdjango1.11とcelery4.1 [sqs]を使用して開発されています。 ElasticBeanstalkを介してAmazonAWSにデプロイされます。 AWSSQSはブローカーです。
この問題は毎晩午後10時42分頃に発生し、約1時間続きます。 何万ものbackend_cleanupタスクが実行され始めます。 管理者のタスク結果のリストに従って、各タスクは正常に実行されます。 CPU使用率が100%のままになる場合があります。 アプリのすべてのページを開くのは難しいです。 問題が発生してから1時間後、CPU使用率は通常に戻ります。 ただし、キューはくさびです。 delay()タスクは実行できません。 SQSでキューをパージし、アプリを再起動して、コード全体をAWS ElasticBeanstalkに再アップロードする必要があります。 その後、delay()タスクは正常に実行されます。 パージ、再起動、または再アップロードを行わないと、非同期タスクは実行されません。 組み込みのbackendcleaupタスクでさえ開始できません。 私のアプリには、組み込みのcelery.backend_cleanupタスクを除いて、定期的なタスクやcrontabタスクはありません。 誰かがこの問題で私を助けることができますか?
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)
その間、キューはAWSSQSから消えました。 その後、backend_cleanupタスクのいくつかが実行を続けました。 そして最後に、警告が表示されました。
[2017-10-23 22:51:28,967:警告/ MainProcess] 10個の未確認メッセージを復元しています
そして最後に、SQSキューへのHTTPS接続が停止しました。 アプリをAWSElastic Beanstalkに再デプロイしない限り、アプリはSQSに再接続できませんでした。
誰かがこの問題で私を助けることができますか? どんな回答でも大歓迎です。
私は問題を解決したと思います。 CELERY_RESULT_BACKENDを「django-db」から「redis」に変更し、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}} ,