TL; DR:сельдерей над Beanstalk брокера: задержки в выполнении задачи
Я выстраиваются в очередь короткие и простые задачи celeryd
через beanstalkd
брокера, используя task.delay
(например myNotifyTask.delay()
вместо myNotifyTask()
). Несмотря на то, что значение задержки предполагается немедленным, задачи занимают около часа, чтобы выполнить (когда они должны занимать всего несколько секунд).
Из моих наблюдений, кажется, задачи действительно получены в beanstalkd
, но остаются в состоянии ready
в течение очень долгого времени. Это происходит, несмотря на установку CELERYD_CONCURRENCY = 8
. При просмотре журналов beanstalkd
я получаю ошибки около read(): Connection reset by peer
, но задачи в конечном итоге выполняются.
Любые идеи, почему это может произойти?
Подробнее ниже.
Использование beanstalk версии 1.4.6, сельдерей 3.0.20.
В журнале Beanstalk записи выглядят следующим образом:
/usr/bin/beanstalkd: prot.c:709 in check_err: read(): Connection reset by peer
При попытке использовать celery
для диагностики проблем:
> celery -b "beanstalk://beanstalk_server:11300" status
Error: No nodes replied within time constraint.
При подключении к beanstalkd
через telnet
, я вижу current-jobs-ready: 343
, которая предполагает работу застряли в состоянии ready
(не delayed
). Вот полный выход:
> telnet localhost 11300
stats
OK 850
---
current-jobs-urgent: 343
current-jobs-ready: 343
current-jobs-reserved: 0
current-jobs-delayed: 0
current-jobs-buried: 0
cmd-put: 2484
cmd-peek: 0
cmd-peek-ready: 7
cmd-peek-delayed: 1
cmd-peek-buried: 1
cmd-reserve: 0
cmd-reserve-with-timeout: 52941
cmd-delete: 2141
cmd-release: 0
cmd-use: 2485
cmd-watch: 42
cmd-ignore: 40
cmd-bury: 0
cmd-kick: 0
cmd-touch: 0
cmd-stats: 497655
cmd-stats-job: 2141
cmd-stats-tube: 3
cmd-list-tubes: 2
cmd-list-tube-used: 1
cmd-list-tubes-watched: 52954
cmd-pause-tube: 0
job-timeouts: 0
total-jobs: 2484
max-job-size: 65535
current-tubes: 3
current-connections: 6
current-producers: 2
current-workers: 2
current-waiting: 1
total-connections: 502958
pid: 989
version: 1.4.6
rusage-utime: 45.778861
rusage-stime: 56.595537
uptime: 2489047
binlog-oldest-index: 0
binlog-current-index: 0
binlog-max-size: 10485760
И вскоре после того, как:
stats-tube celery
OK 257
---
name: celery
current-jobs-urgent: 348
current-jobs-ready: 348
current-jobs-reserved: 0
current-jobs-delayed: 0
current-jobs-buried: 0
total-jobs: 2739
current-using: 3
current-watching: 1
current-waiting: 0
cmd-pause-tube: 0
pause: 0
pause-time-left: 0