信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

2012

6

8月

KeepAliveTimeoutについて

テクログ

みなさん、こんにちわ。

らめぇです。

では、早速。。

 

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の設定。

アクセスが増え、パフォーマンスが低下してきたら一度見直してみると良いかもしれません。

らめぇでした。

この記事を書いた人

マスオさん

coretech

所 属:
WEBインテグレーション事業部
出身地:
渋谷
仕事内容:
Web制作