Celery: Des dizaines de milliers de tùches backend_cleanup exécutées chaque nuit depuis 22h42. Toutes les fonctions asynchrones cessent de fonctionner

CrĂ©Ă© le 21 oct. 2017  Â·  3Commentaires  Â·  Source: celery/celery

Liste de contrĂŽle

  • [x] J'ai inclus la sortie de celery -A proj report dans le numĂ©ro.
    (si vous n'ĂȘtes pas en mesure de le faire, spĂ©cifiez au moins le cĂ©leri
    version affectée).
  • [x] J'ai vĂ©rifiĂ© que le problĂšme existe avec la branche master de Celery.

Mon application est développée en utilisant django1.11 et celery4.1[sqs]. Il est déployé sur Amazon AWS via Elastic Beanstalk. AWS SQS est le courtier.

Étapes à reproduire

Le problĂšme apparaĂźt tous les soirs vers 22h42, pendant environ 1 heure. Des dizaines de milliers de tĂąches backend_cleanup commencent Ă  ĂȘtre exĂ©cutĂ©es. Selon la liste des rĂ©sultats de la tĂąche dans l'administrateur, chaque tĂąche est exĂ©cutĂ©e avec succĂšs. L'utilisation du processeur reste parfois Ă  100 %. Chaque page de l'application est difficile Ă  ouvrir. 1 heure aprĂšs le problĂšme, l'utilisation du processeur est revenue Ă  la normale. Cependant, les files d'attente se coincent. Aucune tĂąche delay() ne peut ĂȘtre exĂ©cutĂ©e. Je dois purger la file d'attente dans SQS, redĂ©marrer l'application et recharger l'intĂ©gralitĂ© du code sur AWS Elastic Beanstalk. Ensuite, les tĂąches delay() seront exĂ©cutĂ©es normalement. Si je ne fais pas la purge, le redĂ©marrage ou le re-tĂ©lĂ©chargement, aucune des tĂąches asynchrones ne sera exĂ©cutĂ©e. MĂȘme la tĂąche backendcleaup intĂ©grĂ©e ne peut pas dĂ©marrer. Mon application n'a pas de tĂąches pĂ©riodiques ou crontab, Ă  l'exception de la tĂąche celery.backend_cleanup intĂ©grĂ©e. Quelqu'un pourrait-il m'aider avec ce problĂšme?

Comportement prévisible

J'ai besoin que l'ensemble de l'application s'exécute normalement une fois les tùches backend_cleanup terminées.

Comportement réel

DĂ©crit dans les ## Étapes pour reproduire

céleri-sqs-worker-report.txt

Question

Commentaire le plus utile

Vous pouvez simplement écraser le planning et éviter d'utiliser 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}} ,

Tous les 3 commentaires

Je viens de découvrir que le problÚme concerne probablement la tùche intégrée, celery.backend_cleanup. Je viens d'exécuter l'application dans l'environnement de développement local. Quand il était 22h42, d'énormes tùches backend_cleanup ont démarré et exécutées avec succÚs. Cependant, aprÚs quelques secondes, une erreur s'est produite. Voici l'erreur.

[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)

Pendant ce temps, la file d'attente a disparu d'AWS SQS. Ensuite, quelques-unes des tùches backend_cleanup ont continué à s'exécuter. Et enfin, un avertissement est apparu.

[2017-10-23 22:51:28,967: WARNING/MainProcess] Restauration de 10 message(s) non acquittés

Et enfin, la connexion HTTPS Ă  la file d'attente SQS s'est arrĂȘtĂ©e. L'application n'a pas pu se reconnecter Ă  SQS Ă  moins que je ne redĂ©ploye l'application sur AWS Elastic Beanstalk.

Quelqu'un pourrait-il m'aider avec ce problÚme? Toute réponse sera grandement appréciée.

Je pense avoir résolu le problÚme. Le problÚme ne se produit jamais aprÚs avoir changé CELERY_RESULT_BACKEND en "redis" de "django-db", et changé CELERY_TIMEZONE en "UTC". Bien que les résultats de tùche dans Django Admin aient cessé d'ajouter des résultats de tùche, mon problÚme avait été en grande partie résolu.

Vous pouvez simplement écraser le planning et éviter d'utiliser 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}} ,

Cette page vous a été utile?
0 / 5 - 0 notes