Сельдерей: почему существует мультисекундный промежуток времени с момента, когда задача принята и когда она начинает выполняться? - PullRequest
1 голос
/ 24 сентября 2019

У меня есть задача сельдерея:

@app.task(bind=True, soft_time_limit=FreeSWITCHConstants.EXECUTE_ATTEMPTS_LOCAL_SOFT_TIME_LIMIT)
def execute_attempt_local(self, attempt_id, provider_id, **kwargs):
  print "PERF - entering execute_attempt_local"
  ...

, которая обрабатывается (удаленным) рабочим со следующей конфигурацией:

celery -A mycompany.web.taskapp worker n -Q execute_attempts-2 --autoscale=4,60

Эта задача порождается тысячами одновременно иИсторически завершалось в течение 1-3 с (это в основном связанная с вводом / выводом задача).

В последнее время, когда общее использование нашего приложения увеличилось, время выполнения этой задачи увеличилось в среднем до 5-8 с, и я пытаюсьчтобы понять, что занимает дополнительное время.Я заметил, что для многих задач, занимающих 5-8 секунд, ~ 4 с занимает промежуток времени между задачей, принимаемой потоком, и выполнением первой строки задачи:

[2019-09-24 13:15:16,627: DEBUG/MainProcess] Task accepted: mycompany.ivr.freeswitch.tasks.execute_attempt_local[d7585570-e0c9-4bbf-b3b1-63c8c5cd88cc] pid:7086
...
[2019-09-24 13:15:22,180: WARNING/ForkPoolWorker-60] PERF - entering execute_attempt_local

Что происходит вчто 4с?Я предполагаю, что у меня есть проблема конфигурации Celery, и где-то не хватает ресурсов для более быстрой обработки этих задач.Есть идеи, что может их замедлить?

1 Ответ

0 голосов
/ 24 сентября 2019

Есть несколько возможных причин, почему это происходит.Автоскалер может занять некоторое время.Таким образом, в зависимости от вашей нагрузки у вас может не хватить рабочих процессов для выполнения ваших задач при их отправке, поэтому они ждут в очереди некоторое время (это могут быть даже минуты или часы), пока не появятся доступные рабочие процессы.

Вы можете легко отслеживать это, посмотрев, сколько задач ожидает в очереди.Если очередь всегда пуста, это означает, что ваши задачи выполняются немедленно.Если нет, это означает, что вы можете добавить новых работников в свой кластер.

...