バックグラウンドプロセスを処理するためにresquegemを使用しています。
それぞれ1人のワーカーで3つのキューを設定しました。
キュー内のワーカーの増減に伴ってメモリがどのように消費されるかを誰かが説明できますか?
各ワーカーが別々のRails環境をロードすると聞きました。本当?
バックグラウンドプロセスを処理するためにresquegemを使用しています。
それぞれ1人のワーカーで3つのキューを設定しました。
キュー内のワーカーの増減に伴ってメモリがどのように消費されるかを誰かが説明できますか?
各ワーカーが別々のRails環境をロードすると聞きました。本当?
私の知る限り、はい、各ワーカーは別々のRails環境を開始します。したがって、ワーカーが3つある場合は、3つのRails環境がロードされます。ワーカーが増えてもキューが長くなることはありません。キューに入れられたジョブの数が、キューを増やすことになります。
いずれにせよ、3つの個別のワーカーを使用する大きな理由がない場合は、すべてのキューに対して1つのワーカーのみを使用し、アプリケーションが時間とともに拡大するにつれてそれらを分離することをお勧めします。
それは真実ではない。ここでのコメントで説明したように、Resqueの正確な目標は、各ワーカーのRails環境をロードしないことです(https://github.com/blog/542-introducing-resqueを参照)。
ルビーのグリーンtrheadingソリューションによって引き起こされる制限のため、CPU全体を使用できるようにするには、プロセッサコアごとに少なくとも1つのワーカーを起動する必要があります。これが、Resqueのデフォルトの動作が各ワーカーを別々のプロセスで起動する理由です。これは、N個の並列プロセスを同時に起動し、それぞれが完全なgemセットを個別にロードすることを意味します。これが、Resqueおよびその他のRubyツールのメモリ使用量が多い主な原因です。ここでは、JVMでネイティブスレッドを使用して状況を改善する方法を確認できます。
したがって、Resqueのメモリ使用量を抑えたい場合は、ワーカーの依存関係をできるだけ低く抑えてください。そして、プロセスを監視するために、神やブルーピルのような監視ツールを使用することは常に非常に重要です。