私はuwsgi/nginx
で実行中のPython/Django
プロジェクトを持っています。セロリプロセスの正しい道アーキテクチャと悪魔化
- のpython:2.7
- ジャンゴ:1.9.7
- セロリ:3.1.23
- django-非同期タスクのために我々は、すべてのデーモン
バージョンを管理するために
rabbitmq/celeryd
とsupervisord
を使用していますセロリ:3.1.17
セロリには、タイプDirect
のキューが10個あります(たとえば、queue1、 queue2、...) 各キューは、supervisord経由で管理される別個のcelerydプロセスによって処理されます。各supervisordプロセスは、したがってSupervisordは、同時実行で(ドントはまだ、どのように、なぜ理解して)私が気づいた
他の事はuwsgiはまた、いくつかセロリの労働者を生成しますで10 Mainprocessと20ワーカー・プロセスを実行している
[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
を以下のようになります= 2である。だから私は4 uwsgiプロセスを実行している場合、私は追加のセロリの労働者を実行する追加を持っています
これらのすべての労働者はそれぞれ200-300Mのメモリを取っている?私はそれを感じますが、私はそれに私の指を置くことができません。セロリは、そのような記憶重いプロセスを実行してはいけませんか?
注:デバッグ= Falseの、何のメモリリークが原因
をデバッグするには存在しない、それが正しいか間違っている場合、誰かがアーキテクチャについてコメントすることはできますか?
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消費量を測定しますか? –
トップとhtopコマンド – Crazyshezy
複数のuwsgiプロセスがあるため、uwsgiはワーカープロセスを起動していますか? (これをテストするために1人の作業者にuwsgiを制限する必要があります) – user2896976