2012-02-05 16 views
0

バックグラウンドタスクを実行するcrontabの方法と比較して、php(キューをリッスン/処理する)でデーモンを作成するのはメモリを消費しますか?memcacheqとcronjobのメモリ消費量

1台のエンジンで1台のサーバーに約600店舗あります。店舗運営には時間がかかる作業がありますので、フォークするのが妥当です。タスクをcronに入れてもうまくいきますが、私はちょうど59秒の開始遅延(cronの制限)が好きではありません。キューシステムを試してみたい。私はちょうど600キロプルスのスレッドを実行してそれらの待ち行列を聞く/処理するようにしてくれるのではないかと心配しています(店は異なる顧客から来ています。それは自動的に約600-1000MBのメモリを必要としません。それは、cron(計画されていればプロセスをロードするだけの)と比べて良い選択ではありません。

答えて

1

59秒の遅延でcronに入れるのではなく、 "at"デーモンを使用して実行してみませんか?単に「今すぐ」を使うだけですぐに実行できます。私は確かに同時にデーモンとしてPHPで600個のスレッドを実行している考えていない,:例えば、

http://unixhelp.ed.ac.uk/CGI/man-cgi?at

を参照してください。

+0

私は冷静におねがいします:)私は "nohup"を一度使っていましたが、 "at"は私にとって新しいものです。この場合、 "nohup"は何か異なっていますか? exec( "nohup php mytask.php")はexec( "echo 'php mytask.php' | at")よりも簡単です。 –

+0

nohupは、プロセスを実行しているユーザーがログアウトしたときにプロセスが強制終了されないことを意味します。それだけでは問題を解決するには不十分ですが、(nohupタスクをバックグラウンドで実行させるために)アンパサンドを追加すると、動作する可能性があります。あなたは 'exec(" nohup php mytask.php& ")' も参照してください。http://en.wikipedia.org/wiki/Nohup – Daan

+0

Daanさん、ありがとうございました。コマンドは今同等ですか? –

1

私は、以前と同じくらい多くを開始するためにsupervisorを使用して、75-100個の別々のPHPプロセスを実行したキューランナーを構築しました。彼らはあまりにも多くの共通コードを共有しているので、それはOSによっても共有され、重複しません。

小規模で高速なジョブのための高優先度のキューと、大規模で低速のジョブをうまく実行できるワーカーのサブセットの数種類を実行しているかもしれません。

私はmy tech blog, phpscaling.comで件名に書いています。

関連する問題