2016-12-23 4 views
0

J'ai démarré l'exécution de céleri pour des tâches dans un projet Web Python/Django, hébergé sur une machine virtuelle unique avec 8 cœurs ou processeurs. J'ai besoin d'améliorer la configuration maintenant - j'ai fait des erreurs de débutant. J'utilise supervisor pour manipuler des ouvriers de céleri et battre. Dans /etc/supervisor/conf.d/, j'ai deux fichiers conf liés aux travailleurs - celery1.conf et celery1.conf. Devrais-je ...Correction de céleri mal configuré (en cours d'exécution avec supervord)

1) Enlever l'un d'entre eux? Les deux engendrent différents travailleurs. C'est à dire. l'ancien fichier conf a command=python manage.py celery worker -l info -n celeryworker1. Ce dernier a command=python manage.py celery worker -l info -n celeryworker2. Et c'est autoritairement stated here pour exécuter 1 travailleur par machine.

2) Bricoler avec numprocs dans la conf? Actuellement dans celery1.conf, j'ai défini numprocs=2. En celery2.conf, j'ai défini numprocs=3 * (voir pied de page plus loin). Dans le même temps, dans /etc/default/celeryd, j'ai CELERYD_OPTS="--time-limit=300 --concurrency=8". Alors que se passe-t-il? superviseur numprocs a priorité sur concurrency dans celeryd, ou quoi? Devrais-je définir numprocs=0?


* numproc total sur les deux fichiers = 2 + 3 = 5. Ceci vérifie. sudo supervisorctl montre 5 processus de travail céleri. Mais dans newrelic, je vois 45 processus exécutant pour celeryd. Que diable?! Même si chaque proc créé par le superviseur donne naissance à 8 procs (via celeryd), total numprocs x concurrency = 5 x 8 = 40. C'est 5 de moins que les 45 montrés par newrelic. Besoin de conseils pour redresser ces torts.

Comparer les screenshots:

5 celery workers as per supervisorctl

vs

45 running celery processes as per newrelic

Répondre

1

il est fermement énoncée ici pour lancer 1 travailleur par machine

Actual En fait, c'est conseillé ("Je suggère") de ne faire fonctionner qu'un seul travailleur par machine pour ce cas d'utilisation donné. Vous pouvez avoir d'autres bonnes raisons de faire autrement (par exemple, avoir des travailleurs différents pour différentes files d'attente ...), et le céleri indique que le nombre de processus par travailleur (concurrence simultanée) dépend vraiment de vous les tâches, l'utilisation, la machine et les whatnots.

wrt/numprocs dans le conf superviseur et concurrency dans le céleri, ce sont des choses totalement indépendantes (enfin, presque ...). Un "ouvrier" céleri est en fait un processus principal engendrant des enfants (qui sont ceux qui gèrent efficacement vos tâches). Le superviseur numprocs indique au superviseur combien de processus (ici: les employés de céleri) il devrait lancer. Donc, si vous avez un céleri conf avec numprocs = 2 et l'autre avec numproc = 3, cela signifie que vous lancez un total de 5 les parents des processus de travail - chacun d'entre eux se reproduisent n subchilds, où - par défaut - n est le CPUs de votre serveur compter.Cela signifie que vous avez un total de 5 + (5 * 8) = 45 sous-processus de travail en cours d'exécution.

Que vous ayez vraiment besoin de beaucoup de travailleurs est une question que vous seul pouvez répondre;)

+0

Merci, bonne explication (et chapeau!). Je suppose que cela m'amène à étudier comment ajuster de façon fiable le nombre de travailleurs dont j'ai besoin. Dans quelle direction pouvez-vous me diriger? –

+0

Eh bien ... Pensez d'abord au type de ressources pour lesquelles vos tâches sont en concurrence vs combien de ressources sont disponibles (compte tenu des autres processus exécutés sur le même serveur), combien de temps vos tâches s'exécutent, à quelle fréquence elles sont appelées sont vos habitudes d'utilisation. Si vous avez des tâches avec des besoins/modèles d'utilisation très différents, vous pouvez les envoyer à différentes files d'attente/différents serveurs (éventuellement avec des allocations de ressources différentes en fonction des files d'attente qu'un serveur va gérer). –