1つのWebページをブラウザが表示するにあたっては、メインのhtmlファイルに加えて、そのhtml上に記述された画像、css、javascript等のファイルをサーバーからダウンロードする必要があります。画像が多いページの場合、1個のhtmlに対して100も200も画像をダウンロードする必要があります。もしkeep-aliveを使用しないとそのすべてのリクエストについて、別々のTCP接続の開始・切断を行うことになってしまいます。keep-aliveを利用すると、通常一つのブラウザからのリクエストを一つのTCP接続で処理することができます。
TCP/IPのコネクションについては、以下のサイトにわかりやすく解説されています。
Apacheで、KeepAliveを有効とするか否かを決定するのが「KeepAlive」ディレクティブです。 KeepAliveの設定は「MaxKeepAliveRequests」ディレクティブと「KeepAliveTimeout」ディレクティブで指定します。
通常はONにすべきというのがほとんどの意見だと思います。
でも「sanonosaシステム管理コラム集」のような意見もあるようです。
ほんとうのところはどうなんでしょうか?
上記の記事ではIISのようですし、設定値が記述されていないので なんとも言えません。
はTCPコネクションを無駄遣いしてしまうことは間違いありません。
そもそもKeepAliveをONにすることはTCPコネクションを無駄遣いしないようにしているのですから本末転倒ということになってしまいます。
ブラウザからの一連の接続が終了したら出来る限り素早くTCPコネクションを切断することが望ましいわけです。しかし、MaxKeepAliveRequestsやKeepAliveTimeoutの設定は固定値であり、接続毎に動的に変更することは出来ません。
※「リクエスト間隔を考慮したウェブサーバのkeep-alive 時間の自動設定」という論文が日本ソフトウェア科学会第22 回大会(2005 年度)論文集に記載されています。興味のある方は読んでみて下さい。
対象のサイトに対するリクエストの平均的な要求値を算出して、
のがやはり正解かなと思います。
例えばユーザがインターネットに接続する帯域が細いと一回の(一連の)リクエストあたり空き時間は長くなります。
実際のサイトの計測は、Web DeveloperのNETオプションを利用すれば簡単に算出できます。
※これは一回あたりの実測ができるだけで、平均となるとアクセスログからなんらかのスクリプトを作成して算出する必要がありますが。
仮に、一回の(一連の)リクエストがファイル数で50個、全部で1秒以内で終了するとします。
にも関わらず、
とされていたとすると、そのTCPコネクションは15秒の間、無駄になってしまう訳です。
我々が開発するような動的ページを中心としてサイトの場合、一回の(一連の)リクエストは通常
数百ミリ秒~数秒を要する
通常は一連のリクエスト中の最初の一回
数ミリか数10ミリ秒以下の場合が多い
リクエスト数が多い(数10個以上)
の2種類から成り立ちます。
次回に続きます。
2月 17
This entry was posted You can leave a response, or trackback from your own site.
コメント入力欄