Apache2でkeepAliveをアクティブ化する必要がありますか?


25

デフォルトのインストールでは、Apache 2のkeepAliveはオフになっていますが、別のサーバーを見ると、keepAliveモジュールがオンになっています。

だから、キープアライブが私にとって正しいかどうかはどうすればわかりますか?これを構成するための良い例を見つけることができますか?

回答:


31

すでに2つの良い答えがありますが、おそらく最も重要な現実の問題はまだ言及されていません。

まず最初に、OPはキープアライブとは何かを理解するために、前述の2つの回答とこの小さなブログ投稿を読みたいと思うかもしれません。(作成者は、接続が長くなるほどTCPI / IPが「高速」になることについて詳しく説明していません。実際、長く続く接続はIPウィンドウのスケーリングの恩恵を受けますが、ファイルがなければまたは、帯域幅遅延製品が異常に大きい。)

Apacheを使用する際のHTTPキープアライブに対する大きな議論は、Apacheプロセスをブロックすることです。つまり、キープアライブを使用するクライアントは、クライアントが接続を閉じるかタイムアウトに達するまで、「彼の」Apacheプロセスが他のクライアントにサービスを提供するのを防ぎます。同じ期間で、このApacheインスタンスは他の多くの接続を提供できたはずです。

現在、非常に一般的なApache構成は、Prefork MPMとPHP / Perl / Pythonインタープリター、および前述の言語のアプリケーションコードです。この場合、各Apacheプロセスは、数メガバイトのRAMを占有するという意味で「重い」(Apacheはインタプリタとアプリケーションコードにリンクされています)。これは、各キープアライブされたApacheインスタンスのブロックとともに、非効率的です。

一般的な回避策は、異なる構成で2台のApacheサーバー(必要に応じて、同じ物理サーバーまたは2台のサーバーの両方)を使用することです。

  • キープアライブをオフにして、動的コンテンツ用のmod_php(または使用するプログラミング言語)が1つ「重い」。
  • キープアライブを有効にして、静的コンテンツ(画像、CSS、JSなど)を提供するための最小限のモジュールセットを持つ1つの「軽量」。

必要に応じて、動的コンテンツと静的コンテンツのこの分離を、たとえば次のように拡張できます。

  • nginxなどの静的コンテンツにイベント駆動型サーバーを使用します。
  • 静的コンテンツにCDNを使用する(すべての静的コンテンツの提供を行うことができます)
  • 静的および/または動的コンテンツのキャッシュを実装する

Apacheのブロックを回避することに関する別のアプローチはPerlbalなどのよりスマートな接続処理を備えたロードバランサーを使用することです。

..などなど。:-)


2
これらの回答は8年後もまだ関連していますか?
-TheStoryCoder

はい、prefork MPMを使用している場合でも関連があります。Apache httpd 2.4(RHEL7など)では、デフォルトでKeepAlive Onを使用します(ただし、少なくともRHEL7では、構成に明示的にリストしません)。
キャメロンカー

5

キープアライブは、場合によっては良い場合もあれば、非常に悪い場合もあります。新しい接続をセットアップする時間と労力は削減されますが、キープアライブタイムアウトの間はサーバーリソースが占有されます。例:

  • 多くの小さなオブジェクト、ダイヤルアップのクライアント-キープアライブのあるページ。
  • 少数の大きなオブジェクトがあるページ-キープアライブは利点ではありません。
  • ユニークビジターの数が非常に多いサーバー-キープアライブはオフにする必要があります(そうでない場合、ソケットとスレッドはキープアライブのタイムアウトを待機し、新しいクライアントにサービスを提供しません)。

ご覧のとおり、KeepAliveTimeoutはサーバーのパフォーマンスの最適化にも大きな役割を果たします。

使用パターンを見て、自分で決めてください。


0

KeepAlive Onを必ず使用する必要があります。

見る:

http://httpd.apache.org/docs/2.0/mod/core.html#keepalive

これにより、単一のTCP接続がブラウザによって再利用され、複数のクエリが送信されます。通常、Webサイトには多くのコンポーネント(HTMLページ、JavaScriptコード、画像)があります。これらのリソースが同じドメインにあるため、同じサーバーでサービスを提供できる限り、KeepAlive接続は、ブラウザが新しいTCP接続を確立する必要がないため、パフォーマンスが大幅に向上します。

ブラウザは通常、ドメインへの約3つの並列接続を開きます。したがって、サイトに18個のオブジェクトがあるとします。ブラウザは3つの接続を開き、KeepAliveモードを使用して、各接続で6つのオブジェクトをダウンロードします。KeepAliveがなければ、18個のTCP接続を開く必要があり、非常に遅いです。

ほとんどの、またはすべての最新のブラウザーはHTTP / 1.1に準拠しているため、これで十分です。

Squidなどの特定のHTTPプロキシはHTTP / 1.1に準拠していませんが、とにかくKeepAlive接続の使用を要求します。


これはクライアント側の考慮事項からのみですが、サーバー側のリソース使用量も重要だと思います。
モーガンチェン

サーバー側のリソース使用量は、ユーザーが認識する遅延よりも重要ですか?
イヴ

1
KeepAliveを有効にすることも信じていますが、Apacheのデフォルトのタイムアウトである15秒は、プロセスを長時間ブロックし続けるため、あまりにも寛大です。通常、タイムアウトを約2秒に設定します。これにより、約1ページのロード中にKeepAliveが使用されます。
マルタインHeemels
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.