web-dev-qa-db-ja.com

Phusionの乗客PassengerMaxRequestQueueSizeの最適値は何ですか

これはボックスのハードウェアに依存することはわかっていますが、たとえば100プロセスが設定されている場合、デフォルトのキューも100です。 PassengerMaxRequestQueueSize を200または300に増やすことは理にかなっていますか?おそらくこれは空きメモリに依存します。考え?

最良の答えは、サーバープロセスが2〜3秒間リクエストを処理すると仮定して、設定とおそらく1つまたは2つの例を説明することです。

前もって感謝します!

31
kode

キューイングを制限すべき理由

アプリケーションプロセスによってすぐに処理されない要求は、キューに入れられます。通常、キューイングは悪いことです。多くの場合、サーバーが要求を十分に迅速に処理できないことを意味します。

キューが大きいほど、リクエストがドロップされる可能性が低くなります。ただし、これには欠点が伴います。忙しい時間帯では、キューが大きくなるほど、ビジターが応答を見るまで待機する時間が長くなります。これにより、リロードをクリックしてキューがさらに長くなるか(以前のリクエストはキューに留まります。OSは、訪問者にデータを送り返そうとするまで切断されたことを認識しません)、またはそのままにします。欲求不満。

したがって、キューに制限を設けることは良いことです。上記の状況の影響を制限します。

リクエストはできるだけキューに入れないようにする必要があります。つまり:

  • アプリを高速化します(ワークロードがCPUバウンドの場合)。
  • より高速なハードウェアにアップグレードする(ワークロードがCPUバウンドの場合)。
  • アプリの同時実行設定を増やす(ワークロードがI/Oバウンドの場合)。プロセスまたはスレッドの数を増やす。

リクエストがキューに入れられるのを防ぐことができない場合、次に行うべき最善のことは、キューを保持しshort、到達したときにわかりやすいエラーメッセージを表示することですキュー制限。 「申し訳ありませんが、現在多くの方が訪れています。しばらくしてからもう一度お試しください。」のようなものです。 PassengerMaxRequestQueueSizeのドキュメント は、その方法を示しています。

キューサイズの最適値

最適なキューサイズがどうあるべきかを言うのは難しいです。経験則として、リクエストキューのサイズを、1秒間に処理できるリクエストの最大数に設定します。状況によっては、少し調整する必要があります。

この経験則は、予想されるバーストトラフィックの概念に基づいています。サーバー上で同時にいくつのリクエストを期待していますか?

キューのサイズが100で、何らかの理由で150のリクエストを同時に受け取ると仮定します。サーバーが十分な速度で150秒のリクエストを0.5秒で処理できると仮定すると、パフォーマンスの問題ではないことがわかります。ただし、リクエストキューのサイズが100の場合、それらのリクエストのうち50件は「リクエストキューがいっぱいです」というエラーで破棄されます。

このような状況では、パフォーマンスの問題なしに安全に処理できると思われる同時リクエストの最大数にキューサイズを設定する必要があります。

44
Hongli

これ SO質問と乗客のドキュメント ここ これでの作業について詳しく話してください。実行できるサーバーpassenger-status(通常、これをrootとして実行する必要があります)。

訪問者がこの問題を見つけたときにカスタムエラーページを設定したい場合は、次を使用して(Apacheで)カスタムエラーページを設定できます。

PassengerErrorOverride on
ErrorDocument 503  /error503.html

Hongliが述べたように、PassengerMaxRequestQueueSizeの設定をより大きな値に変更して、より多くのリクエストをキューに入れることもできます。これを0に設定して無効にすることもできます(ただし、ほとんどの場合、これは最適なソリューションではありません)。

参考までに、この制限にぶつかると、サイトの訪問者に表示されるデフォルトのエラーメッセージは次のとおりです。

This website is under heavy load

We're sorry, too many people are accessing this website at the same time. We're working on this problem. Please try again later.
9
SnapShot