web-dev-qa-db-ja.com

Passenger + Rails +グローバルキュー-特定のリクエストを特定のキューに送信できますか?

私は、トラフィック量が比較的少ないサイトを持っており、通常は3〜4人の乗客インスタンスによって喜んで提供されます。

ただし、完了までに最大15〜20秒かかる可能性のある多数の自動リクエストによって打撃を受けることがあります。これにより、グローバルキューがバックアップされ、サーバーが通常のユーザーに応答しなくなります。

----------- General information ------
max      = 18                                       
count    = 18                                       
active   = 17                                       
inactive = 1                                        
Waiting on global queue: 115                        

15分後、Apacheを再起動してキューをクリアした後、すべてが正常に戻ります。

----------- General information -----------
max      = 18
count    = 4
active   = 0
inactive = 4
Waiting on global queue: 0

----------- Application groups -----------
/apps/mailapp/current:
  App root: /apps/mailapp/current
  * PID: 31044   Sessions: 0    Processed: 275     Uptime: 14m 21s
  * PID: 31047   Sessions: 0    Processed: 314     Uptime: 14m 21s
  * PID: 31060   Sessions: 0    Processed: 284     Uptime: 14m 17s

インスタンスの最大数を18(VPSで同時に実行できる数とほぼ同じ)にプッシュしました。これは少しは役に立ちましたが、あまり役に立ちませんでした。リクエストを可能な限り最適化しました(30秒程度から15〜20秒に短縮)。

バックアップの原因となっているリクエストは自動化されているため、特にタイムリーにサービスを提供する必要はありません。この特定のリクエストを処理するだけの多数の乗客インスタンスを確保する方法はありますか? (おそらくURLパスに基づく)。

3
Dave Smylie

私はこれを修正しました。

インスタンスの最大数に制限があるApacheを使用して新しい仮想ホストを作成しました。

これは、元のアプリを指すようにOSでシンボリックリンクされていました。これにより、必要な数のインスタンスでメインアプリを実行できますが、シンボリックリンクされた仮想ホストで実行できるインスタンスの数には制限があります。

これにより、シンボリックリンクされたホストでのCPU使用率に関していくらか関連する問題が発生しました: Apache/Passenger and cpulimit

1
Dave Smylie