処理スクリプト用に Laravel でキューを設定しました。私はbeanstalkdとsupervisordを使用しています。さまざまなタイプの処理用に 6 つの異なるチューブがあります。
問題は、チューブごとに、artisan が常に毎秒ワーカーを生成していることです。ワーカー コードは 1 秒間スリープしているように見えますが、ワーカー スレッドは 7 ~ 15% の CPU を使用し、これに 6 チューブを掛けます...そして、チューブごとに複数のワーカーが必要です..CPU が使い果たされています。
1秒のスリープを10秒に変えてみました。これは役に立ちますが、ワーカーが復帰すると 10 秒ごとに大きな CPU スパイクが発生します。キューが完全に空であるため、現時点では何も処理していません。ワーカーが何かを探しているだけです。
また、ブラウザでページを更新したときのlaravelのCPU使用率を確認するためにテストしましたが、それは約10%でした。ワーカーは、起動するたびに laravel インスタンスをスピンアップします。
これを解決する方法はありませんか?仕事の準備ができているかどうかを聞くことができるようにするためだけに、より高価なサーバーに多額の資金を投入する必要がありますか?
編集:
解決策が見つかりました...職人のキュー:リスナーまたはキュー:ワークを使用しないことでしたキューコードを調べたところ、この問題を回避する方法はないようです。ワーカーがチェックするたびにlaravelをロードする必要がありますより多くの仕事のために。
代わりに、pheanstalk を使用して独自のリスナーを作成しました。私はまだlaravelを使用して物事をキューにプッシュしています。カスタムリスナーはキューデータを解析し、職人のコマンドを実行します。
現在、リスナーの CPU 使用率は %0 未満です。CPU が起動するのは、実際に実行する作業を見つけてコマンドをトリガーするときだけです。それで問題ありません。