我有一個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