2

午後、

私たちは本番環境でGearmanを使用しており、毎日数十万のジョブを処理している2人のワーカー(忙しいワーカー)がいます。わずかなメモリの問題が発生しています。リークは非常に小さいですが、数日後には蓄積されています。

コマンドラインで、実行すると

gearman --help

それは言う

...
Worker options:
-c <count> - Number of jobs for worker to run before exiting

これは理想的なオプションのようです。50〜kに設定すると、ワーカーが停止して問題が解決することがわかります。しかし、ギアマンのpeclライブラリを調べても、どこに追加/構成できるかわかりません。

intをとるAddOptionメソッドがありますが、これを設定できる場所への参照がドキュメントまたはソースコードに見つかりません。

自分の管理システムを構成したくない...

何か案は?

4

2 に答える 2

1

そのような制限を追加することは通常簡単なので、おそらくワーカーの処理方法に関するコードを投稿する必要があります。マニュアルのサンプルに基づいて:

$worker = new GearmanWorker(); 
$worker->addServer(); 

$worker->addFunction("reverse", "my_reverse_function"); 

while ($worker->work()); 

ワーカーは一度に 1 つの操作を実行するため、while ループを別のものに置き換えるだけで済みます。

for ($i; 50000 > $i; ++$i) { $worker->work(); }

どうやってワーカーを存続させているのかわかりませんが、Upstartがうまく機能することがわかりました。

于 2012-07-12T13:04:03.183 に答える
1

GearmanManagerを使用すると、各ワーカーが再起動されるまでの時間を指定できます (実行されたタスクではなく秒単位)。

それ以外の場合は、ワーカーで実行されたタスクの数を追跡し、while ループで bash スクリプトを使用して開始することができます。50k に達したら、exit() して、bash スクリプトにワーカーを再起動させます。

于 2012-07-12T11:16:29.907 に答える