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:
vs
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? –
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). –