0

私は、8 つのコアまたは CPU を備えた単一の VM でホストされている Python/Django Web プロジェクトで、タスクのためにセロリの実行を開始しました。今すぐ設定を改善する必要があります - 私は初歩的なミスを犯しました。

私はsupervisorセロリの労働者とビートを処理するために使用します。には/etc/supervisor/conf.d/、worker 関連の conf ファイルcelery1.confcelery1.conf. するべきか...

1)それらの 1 つを削除しますか? どちらも異なるワーカーを生成します。つまり、以前の conf ファイルにはcommand=python manage.py celery worker -l info -n celeryworker1. 後者はcommand=python manage.py celery worker -l info -n celeryworker2. ここでは、マシンごとに 1 つのワーカーを実行することが正式に述べられています。

2) conf をnumprocsいじくり回しますか? 現在 にありcelery1.conf、 を定義しましnumprocs=2た。では、 *celery2.confを定義しました(後でフッターを参照)。numprocs=3同時に/etc/default/celeryd、私は を持っていCELERYD_OPTS="--time-limit=300 --concurrency=8"ます。どうしたの?スーパーバイザーは celerydnumprocsよりも優先されますか、それとも何ですか? concurrency設定する必要がありnumprocs=0ますか?


*両方のファイルの合計 numprocs = 2+3 = 5. これでチェックアウトされます。sudo supervisorctl5 つのセロリ ワーカー プロセスを示します。しかし、newrelic では、celeryd に対して45 のプロセスが実行されています。一体何?! スーパーバイザーによって作成された各 proc が実際に (celeryd を介して) 8 つの proc を生成している場合でも、合計numprocs x concurrency = 5 x 8 = 40. これは、newrelic が示した 45 よりも 5 少ない数です。これらの過ちを正すためのガイダンスが必要です。

スクリーンショットを比較します。

Supervisorctl ごとに 5 つのセロリ ワーカー

newrelic に従って 45 の実行中のセロリ プロセス

4

1 に答える 1

3

ここでは、マシンごとに 1 つのワーカーを実行することが正式に述べられています

実際、この特定のユースケースでは、マシンごとに 1 つのワーカーのみを実行することをお勧めします (「お勧めします」) 。

そうしないとかなりの理由があるかもしれません (たとえば、キュ​​ーごとに異なるワーカーを使用するなど)。セロリのドキュメントには、ワーカーの数/ワーカーあたりのプロセスの数 (同時実行) が最適に機能するかどうかは、実際にはタスク、使用状況に依存すると述べられています。 、機械など。

wrt/numprocsスーパーバイザ conf とconcurrencycelery では、これらはまったく関係のない (まあ、ほとんど...) ものです。セロリの「ワーカー」は、実際にはconcurrency子 (タスクを効果的に処理するプロセス) を生成する主要なプロセスの 1 つです。Supervisor'snumprocsは、起動する必要があるプロセス (ここではセロリ ワーカー) の数をスーパーバイザーに伝えます。したがって、numprocs= 2 のセロリ conf が 1 つと = 3 の別のセロリ conf がある場合numproc、これは合計 5 つのワーカー プロセスを起動することを意味し、それぞれがnサブチャイルドを生成します。デフォルトでnは、サーバーの CPU 数です。これは、合計 5 + (5*8) = 45 個のワーカー サブプロセスが実行されていることを意味します。

実際に多くのワーカーが必要かどうかは、あなただけが答えられる質問です;)

于 2016-12-23T15:56:25.043 に答える