我有一个Python/Django
项目运行在uwsgi/nginx
。对于异步任务中,我们使用的是rabbitmq/celeryd
和supervisord
来管理所有的守护进程正确的方式芹菜过程体系结构和妖魔
版本:
- 蟒蛇:2.7
- Django的:1.9.7
- 芹菜:3.1.23
- django-芹菜:3.1.17
芹菜有10队列的类型Direct
(比如队列1,队列2,...) 每个队列由一个单独的芹菜过程处理,该过程通过supervisord进行管理。每个supervisord过程看起来如下
[program:app_queue_worker]
command=/var/www/myproj/venv/bin/celery worker -A myproj -c 2 --queue=queue1 --loglevel=INFO
directory=/var/www/myproj/
user=ubuntu
numprocs=1
autostart=true
autorestart=true
startsecs=10
exitcodes=1
stopwaitsecs = 600
killasgroup=true
priority=1000
因此Supervisord运行10个Mainprocess和20个工作进程
我注意到另一件事是uwsgi也滋生了一些芹菜工人(不明白如何以及为何,未)并发= 2。所以,如果我有4 uwsgi进程在运行,我将有运行
所有这些工人的另外10芹菜工人每次服用200-300M内存?我觉得这里有点不对劲,但我无法把它指向它。芹菜不应该跑这样的记忆重过程?
注:调试=假,还有是由于调试
是否有人可以在体系结构上,如果它是正确的或错误的评论没有内存泄漏?
运行2-3芹菜MainProcesses一次侦听所有队列并提高其并发性会更好吗?
更新:celery.py配置
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyProject.settings')
from django.conf import settings # noqa
from chatterbox import celery_settings
app = Celery('MyProject')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.conf.update(
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
CELERYD_CONCURRENCY=1,
)
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
你如何测量RAM的消耗量? –
Top和htop命令 – Crazyshezy
uwsgi是否启动了工作进程,因为有多个uwsgi进程? (应该能够限制uwsgi给1名工作者测试) – user2896976