Estou usando o aipo 2.5.1 com django em uma instância micro ec2 com 613mb de memória e, como tal, tenho que manter o consumo de memória baixo.
Atualmente estou usando apenas para o agendador "celery beat" como uma interface web para o cron, embora eu espere usá-lo para mais no futuro. Eu notei que é o maior consumidor de memória na minha micro máquina, embora eu tenha configurado o número de trabalhadores para um. Eu não tenho muitas outras opções definidas em settings.py:
import djcelery
djcelery.setup_loader()
BROKER_BACKEND = 'djkombu.transport.DatabaseTransport'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERY_RESULT_BACKEND = 'database'
BROKER_POOL_LIMIT = 2
CELERYD_CONCURRENCY = 1
CELERY_DISABLE_RATE_LIMITS = True
CELERYD_MAX_TASKS_PER_CHILD = 20
CELERYD_SOFT_TASK_TIME_LIMIT = 5 * 60
CELERYD_TASK_TIME_LIMIT = 6 * 60
Veja os detalhes no topo:
PID USER NI CPU% VIRT SHR RES MEM% Command
1065 wuser 10 0.0 283M 4548 85m 14.3 python manage_prod.py celeryd --beat
1025 wuser 10 1.0 577M 6368 67m 11.2 python manage_prod.py celeryd --beat
1071 wuser 10 0.0 578M 2384 62m 10.6 python manage_prod.py celeryd --beat
Isso é cerca de 214mb de memória (e não muito compartilhada) para executar um cron job ocasionalmente. Eu fiz alguma coisa errada, ou isso pode ser reduzido em cerca de dez vezes de alguma forma? ;)
Atualizar : aqui está minha configuração inicial:
description "Celery Daemon"
start on (net-device-up and local-filesystems)
stop on runlevel [016]
nice 10
respawn
respawn limit 5 10
chdir /home/wuser/wuser/
env CELERYD_OPTS=--concurrency=1
exec sudo -u wuser -H /usr/bin/python manage_prod.py celeryd --beat --concurrency=1 --loglevel info --logfile /var/tmp/celeryd.log
Atualização 2 :
Noto que há um processo raiz, um processo filho do usuário e dois netos dele. Então, acho que não é uma questão de inicialização duplicada.
root 34580 1556 sudo -u wuser -H /usr/bin/python manage_prod.py celeryd
wuser 577M 67548 └─ python manage_prod.py celeryd --beat --concurrency=1
wuser 578M 63784 ├─ python manage_prod.py celeryd --beat --concurrency=1
wuser 271M 76260 └─ python manage_prod.py celeryd --beat --concurrency=1