2016-12-23 5 views
0

Я начал использовать сельдерей для задач в веб-проекте Python/Django, размещенном на одной виртуальной машине с 8 ядрами или процессорами. Мне нужно улучшить конфигурацию сейчас - я сделал ошибки новобранец.Исправление неправильно настроенного сельдерея (работает с супервизором)

Я использую supervisor для обработки работников сельдерея и избиения. В /etc/supervisor/conf.d/ у меня есть два файла-менеджера, связанные с работой, - celery1.conf и celery1.conf. Должен ли я ...

1) Удалить один из них? Оба порождаются разными работниками. То есть в первом файле conf command=python manage.py celery worker -l info -n celeryworker1. Последний имеет command=python manage.py celery worker -l info -n celeryworker2. И авторитетно stated here для запуска 1 рабочего на машину.

2) Тинкер с numprocs в конф. В настоящее время в celery1.conf, я определил numprocs=2. В celery2.conf, я определил numprocs=3 * (см. Нижний колонтитул позже). В то же время, в /etc/default/celeryd, у меня есть CELERYD_OPTS="--time-limit=300 --concurrency=8". Так, что происходит? у супервизора numprocs имеет преимущество перед concurrency в сельдереем, или что? Должен ли я установить numprocs=0?


* total numprocs над обоими файлами = 2 + 3 = 5. Это проверяет. sudo supervisorctl показывает 5 рабочих процессов сельдерея. Но в newrelic я вижу 45 процессов, выполняющихся для celeryd. Какого черта?! Даже если каждая проза, созданная супервизором, фактически рождает 8 проков (через celeryd), всего numprocs x concurrency = 5 x 8 = 40. Это 5 меньше, чем 45, показанных newrelic. Нужна помощь в устранении этих нарушений.

Сравнить скриншоты:

5 celery workers as per supervisorctl

против

45 running celery processes as per newrelic

ответ

1

это авторитетно заявил здесь, чтобы работать в течение 1 рабочего на машину

Actual ly, это посоветовал («Я бы предложил») для запуска только одного рабочего на машину для данного прецедента.

Возможно, у вас могут быть веские основания поступать иначе (например, иметь разных работников для разных очередей ...), а в документе celery dell указано, сколько рабочих/сколько процессов на одного работника (параллелизма) работает наилучшим образом, действительно зависит от ваши задачи, использование, машина и многое другое.

wrt/numprocs в супервизоре conf и concurrency в сельдерее, это абсолютно несвязанные (ну, почти ...) вещи. «Рабочий» сельдерея на самом деле является одним из основных процессов, порождающих детей concurrency (которые эффективно обрабатывают ваши задачи). Супервизор numprocs рассказывает руководителю, сколько процессов (здесь: работники сельдерея) он должен запустить. Так что если у вас есть один сельдерей конф с numprocs = 2, а другой с numproc = 3, это означает, что вы запускаете в общей сложности 5 родителей рабочих процессов - каждый из них нерест n subchilds, где - по умолчанию - n является процессоры вашего сервера сосчитать.Это означает, что вы работаете в общей сложности 5 + (5 * 8) = 45 подпроцессов.

Wether вам действительно нужно, чтобы многие работники задавали вопрос, на который вы можете ответить;)

+0

Спасибо, большое объяснение (и шляпа!). Полагаю, это подводит меня к исследованию того, как надежно настраивать количество рабочих, в которых я нуждаюсь. Любое направление, на которое вы можете указать мне? –

+0

Ну ... Сначала подумайте, какие ресурсы ваши задачи конкурируют за vs от того, сколько из этого ресурса доступно (учитывая другие процессы, запущенные на одном сервере), как долго выполняются ваши задачи, как часто их вызывают и т. Д. - глобально, что ваши шаблоны использования. Если у вас есть задачи с очень разными потребностями/шаблонами использования, вы можете отправить их в разные очереди/разные серверы (возможно, с разными распределениями ресурсов в зависимости от очередей, которые будет обрабатывать сервер). –

 Смежные вопросы

  • Нет связанных вопросов^_^