2

かなり簡単な質問かもしれませんが、システムでセロリのタスクプロセスが実行されているのをよく見かけますが、celery.task.control.inspect()active()メソッドを使用すると見つかりません。多くの場合、このプロセスは何時間も実行されますが、それが何らかのゾンビであるのではないかと心配しています。通常、それも多くのメモリを消費しています。

Linux pidでタスクを検索する方法はありますか?セロリまたはAMPQ結果バックエンドはそれを保存しますか?

そうでない場合、どの特定のタスクが記憶を食い尽くしているのかを理解する他の方法はありますか?

- - 更新しました:

active()特定のボックスで実行されているタスクはないが、ボックスのメモリは完全に使用されており、htopは、これらのワーカープールスレッドがそれを使用しているが、同時に0%を使用していることを示している場合に何ができますかCPU?これが私の現在のラックスペース設定の癖に関連していて、誰も答えられないことが判明した場合でも、私はローレンを受け入れます。

ありがとう〜

4

1 に答える 1

4

「タスク」とは「労働者」を意味すると仮定します。そうでなければ、質問はほとんど意味がありません。

状況によっては、Celeryワーカープールのプロセス階層を理解することが重要です。ワーカープールは、同じ構成(同じキューのセットのメッセージを処理するなど)を共有するワーカープロセス(またはスレッド)のグループです。各プールには、プールを管理する単一の親プロセスがあります。このプロセスは、フォークされる児童労働者の数を制御し、子供が死亡したときに代替の子供をフォークする責任があります。親プロセスはAMQPにバインドされた唯一のプロセスであり、子はIPCを介して親からタスクを取り込んで処理します。親プロセス自体は、実際にはタスクを処理(実行)しません。

さらに、質問への回答に向けて、親プロセスはCeleryの検査ブロードキャストに応答するプロセスであり、プール内のワーカーとしてリストされているPIDは児童労働者のみです。親PIDは含まれていません。

--pidfileコマンドラインパラメーターを使用してCeleryデーモンを起動している場合、そのファイルには親プロセスのPIDが含まれ、参照しているプロセスとそのPIDを相互参照して、それが存在するかどうかを判断できるはずです。実際には、プールの親プロセスです。Celery multiを使用して複数のインスタンス(複数のワーカープール)を起動している場合、デフォルトでは、PIDファイルはCelerymultiを呼び出したディレクトリに配置されている必要があります。これらの手段のいずれも使用せずにCeleryを起動する場合は、これらの手段のいずれかを使用して、プロセスがゾンビではなく、実際には単なる親であることを確認してください。

于 2013-01-22T06:48:09.533 に答える