私の/etc/defaults/celeryd
設定ファイル、私は設定しました:
CELERYD_NODES="agent1 agent2 agent3 agent4 agent5 agent6 agent7 agent8"
CELERYD_OPTS="--autoscale=10,3 --concurrency=5"
デーモンは8個のセロリワーカーを生成することは理解していますが、autoscale
とconcurrency
が一緒に何をするかは完全にはわかりません。並行性は、ワーカーが使用できるスレッドの最大数を指定する方法であり、オートスケールは、必要に応じてワーカーが子ワーカーをスケールアップおよびスケールダウンする方法だと思いました。
タスクには大きなペイロード(約20〜50kB)があり、そのようなタスクは2〜3百万個ありますが、各タスクは1秒未満で実行されます。ブローカーがタスクをすべてのワーカーに分散し、ペイロードを複数回複製するため、メモリ使用量が急増しています。
問題は構成にあり、ワーカー+同時実行+自動スケーリングの組み合わせが多すぎると思います。これら3つのオプションが何をするのかをよりよく理解したいと思います。
ワーカーとワーカープロセスを区別しましょう。セロリワーカーを生成すると、多数のプロセスが生成されます(--concurrency
および--autoscale
、デフォルトではマシン上のコアと同じ数のプロセスが生成されます)。ルーティングを行わない限り、特定のマシンで複数のワーカーを実行しても意味がありません。
デフォルトのプロセス数で、マシンごとに1人のワーカーのみを実行することをお勧めします。これにより、ワーカー間のデータの重複が排除され、メモリ使用量が削減されます。
それでもメモリの問題がある場合は、データをストアに保存し、idのみをワーカーに渡します。