2012.08.06
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
みなさん、こんにちわ。
らめぇです。
では、早速。。
KeepAliveの説明
1回のTCP接続で複数のHTTPリクエストを処理する機能。
HTTP/1.0 の Keep-Alive 拡張と HTTP/1.1 の持続的接続の機能は、 複数のリクエストが同じ TCP の接続で送られる、長時間持続する HTTP セッションを提供します。
apacheドキュメントより引用
簡単に説明するとKeepAliveとは、「three-way handshaking」の節約です。
画像やCSSが多いサイトではKeepAliveをonにすることによりその恩恵を受けることができるでしょう。
KeepAlive関連ディレクティブは、以下のとおりです。
下記のディレクティブを設定することでKeepAlive機能を制御します。
KeepAlive
HTTP の持続的な接続を有効にします。(On/Offで設定します)
KeepAliveTimeout
KeepAlive=On の時に有効で、持続的な接続で次のリクエストが来るまでサーバが待つ時間(秒)を設定します。
MaxKeepAliveRequests
KeepAlive=On の時に有効で、持続的な接続上で許可されるリクエストの数を設定します。
KeepAliveTimeoutってなに?
以下の設定について考えてみましょう。
KeepAliveTimeout 15
KeepAliveとは「three-way handshaking」の節約と説明しました。
Webサーバとの間で確立した接続が転送終了後も維持され、2回目以降のリクエストではこの接続をそのまま使用できる。
一見、良いことだらけに見えるこのKeepAliveにも欠点があります。
その一つがKeepAliveTimeoutの設定時間
上の例では、KeepAliveTimeout 15としています。
ひとつの要求が完了してから、コネクションを切断しないで次の要求を受け入れるまでの時間。
言い方を変えると「クライアントからのリクエストがなくてもKeepAliveを維持する秒数」ということになります。
「リクエストがなくてもKeepAliveを維持する秒数」ここがポイントです。
処理がすぐに終わった場合でもKeepAliveTimeout 15のままだと、
15秒間接続をキープしたままになり、このプロセスは無駄になってしまうということです。
短くするほど無駄な接続を減らせますが、短くしすぎると必要なコネクションまで閉じてしまいます。
クライアントがコネクションを確立し直す場合が増えます。
結局は環境に合わせて適切な値を見つけてくださいってことです。
小規模のサイトではあまり気にしない(設定を変えても効果はないと思います)KeepAliveの設定。
アクセスが増え、パフォーマンスが低下してきたら一度見直してみると良いかもしれません。
らめぇでした。