我在一个微型EC2实例上使用了celery 2.5.1和django,内存为613mb,因此必须降低内存消耗。
目前我只用于调度程序“芹菜殴打”作为一个networking界面的克朗,但我希望在未来更多地使用它。 我已经注意到这是我的微型机器上最大的内存消费者,尽pipe我已经将工人数量configuration为一台。 我没有在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
这是通过顶部的细节:
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
这大约是214mb的内存(并没有太多共享)偶尔运行一个cron工作。 我做错了什么,或者可以减less十倍吗? ;)
更新 :这是我的新贵configuration:
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
更新2 :
我注意到有一个根进程,一个用户subprocess和两个孙子。 所以我认为这不是重复启动的问题。
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
你可以确保芹菜只包括最低限度的代码(我已经看到芹菜被configuration为导入人们的整个Web应用程序…不是很漂亮)。 然而,在一天结束的时候,你正在看一大堆的Python,它本质上会咀嚼大量的内存。
如果你想要一个低内存的任务调度工具,我会build议真正的,诚实的cron。