web-dev-qa-db-ja.com

Apache-キープアライブかキープアライブでないか?

Magento Enterprise Editionを使用した高性能eコマースの方法とベストプラクティス (登録が必要)キープアライブをオフにする必要がある(トラフィックの多いサイトの場合)

mod_qosは、サーバーの空き接続が不足している場合に、キープアライブサポートを無効にすることもできます。

つまり、問題は、低メモリ(360Mb)のサーバーでキープアライブを無効/有効にする必要がありますが、キープアライブをオンにしておくことにはメリットがありますか?

副次的な質問:キープアライブは、nestatによると、多くのTIME_WAIT接続があることと関係がありますか?

TIME_WAIT接続はサーバーリソースを浪費していますか?

6
Cesar

キープアライブをオンにしておくことの利点は、クライアントが別のTCP接続を作成することなく、サーバーから複数のエンティティを要求できるようになることです(そのラウンドトリップとの3方向ハンドシェイクこれに伴う問題は、たとえば、Apacheの接続制限が300に設定されている場合、アクティブな接続が300ある場合、他のすべての接続は最初の300クライアントが完了するか、タイムアウトになるまで待機する必要があることです。

キープアライブを無効にすると、クライアントはリクエストごとに1つの接続を作成します。ソケットが両端で適切に閉じられると、気づいたように、TIME_WAITステータスになります。これは、その接続で使用されているポートが、使用可能になる前にしばらく前の接続からデータを受信しないことを保証するために起こります( this を参照してください。ただし、他にもたくさんあります)。私のLinuxシステムでは、/ proc/sys/net/ipv4/tcp_fin_timeoutが60秒に設定されています。あなたはそれを減らすことを試みることができますが、あまり遠くまで行かないでください。どこまで? 1秒あたりの接続数によって異なります。 100-200req/sの場合、デフォルトを変更する必要はありません。

5
Gonzalo

メモリの少ないサーバーでは、あらゆる規模でキープアライブをオンにすると問題が発生します。これは、Apacheが接続ごとに1つのスレッドまたはプロセスを作成し、デフォルトでLinuxに8 MBのスタックを割り当てるためです(これは、Apache構成を介して、アプリケーションに依存する程度まで調整できます)。 360 MBサーバーでは、すべてのクライアントが少なくとも1つ、場合によっては2つの接続を開いたままにしている場合、これが問題になる可能性があります。

これが実際、 nginxlighttpd のようなイベントベースのWebサーバーが作成された主な理由です。これにより、システムは、メモリ。

だから、私はあなたの状況でケッパリブをオフにして、クライアントへのパフォーマンスの影響に耐えます。あるいは、Apacheの前でnginxのようなものを使用して、ユーザー向けの接続を処理し、Apacheにリクエストをプロキシすることもできます。これは非常に一般的なモデルであり、ディスクやデータベースアクセスなどの操作をブロックする可能性のある「スレッドプール」としてApacheを効果的に扱います。

7
rmalayter