私は次の設定をしています:
- 100 ワーカーのジェネリック ワーカー プール
- 50 人のワーカーを含む優先度の高いワーカー プール
- ほとんどの場合、タスクが非常に長いタイムアウト (応答に最大 20 秒かかる HTTP 要求の実行) で I/O の待機に費やされるため、このような大きな数を使用しました。
- RabbitMQ をブローカーとして使用する
- 次のパラメーターを使用して、celery'd github
の init.dスクリプトを使用して、celeryd をデーモンとしてセットアップしました。
CELERYD_OPTS="--time-limit=600 -c:low_p 100 -c:high_p 50 -Q:low_p low_priority_queue_name -Q:high_p high_priority_queue_name"
私の問題は、キューが「バックアップ」しているように見えることがあることです...つまり、タスクの消費が停止します。これにはシナリオがあるようです:
- すべてのワーカーが使い果たされているわけではないことが示されますが、ブローカーで「未確認」メッセージがゆっくりと蓄積されます。
celery inspect active
つまり、いくつかのアクティブなタスクしか表示されません。 - キューは、蓄積することなく、新しいタスクの消費を停止します。
- 「デッド」状態の場合
strace
、ワーカープロセスで使用しても何も返されません...ワーカーからのアクティビティは完全にゼロです
以下に関する情報や指針をいただければ幸いです。
- どうすればデバッグできますか。
strace
ワーカー プロセスが何をしているかを確認するために使用できますが、これまでのところ、ワーカーがハングしていることを伝えるのに役立ちました。 - これを監視する方法と、自動回復を行う方法。セロリを管理するためのツールはたくさんあります (
flower
ただしevents
、どちらもリアルタイムで優れていますが、自動監視/警告機能はありません)。Supervisord を使用して独自の監視ツールを作成したほうがよいのでしょうか?
また、django-celery からタスクを開始しています