コネクションを維持するKeepAlive

コネクションを維持するKeepAlive

 HTTP/1.0(RFC1945にて規格化)では、コネクションの確立を行い1つのリクエスト処理が完了すると同時にコネクションは解放される。参照したいWebページが単一のHTML文章のみで記述されている場合は、この方法でなんら問題ない。

 しかし、クライアントが表示しようとしているWebページが複数のファイルで構成されている場合、そのファイルの数だけコネクションの確立・解放を繰り返すことになる。

 WWWが文章ファイルのやりとりに用いられていた90年代当初は、Webページを構成するファイル数が少なかったので、コネクションの確立・解放が応答時間に与える影響はさほど大きくはなかった。

 しかし、現在では多くのファイルによりWebページが構成されているため、Webページを表示する際には数多くのリクエストを送らなければならない。つまり、リクエスト1つ1つに対して3ウェイハンドシェイクを行い、コネクションの確立・解放を行っていたのでは、ネットワークやサーバに負担がかかり、応答時間の悪化を招きかねない。この問題を解決すべくHTTP/1.1(RFC2616にて規格化)から標準でサポートされた手法が「KeepAlive」である。

 「KeepAlive」は、HTTP/1.1から正式に採用された機能(HTTP/1.0では拡張機能)であり、クライアント―サーバ間のコネクション維持に関する設定である。

 KeepAliveを有効にするか否かの設定を行うのが、「KeepAlive」ディレクティブであり、デフォルトではONになっている。以降で説明する「KeepAliveTimeout」は「KeepAlive」が有効であることが前提であることに注意されたい。

 「KeepAlive」により、1つのリクエストが完了するたびにコネクションを開放することを防ぎ、以降に示す「KeepAliveTimeout」ディレクティブで設定された条件に達するまで、コネクションを維持することができる。

 つまり、コネクションの確立・解放を無駄に繰り返すことなく、確立された1つのコネクションを利用し複数のリクエストを処理することができる。よって、サーバやネットワークにかかる負担を軽減でき、応答時間の改善が期待できる。

維持する最大時間を設定するKeepAliveTimeout

 「KeepAliveTimeout」は、コネクションをアイドル状態で維持できる最大時間(最後のリクエストの処理が完了してから、コネクションが解放されるまでの待ち時間)を設定するディレクティブである。

 デフォルト値は15に設定されており、単位は秒である。1つのリクエストに対する応答が完了すると同時に、カウントダウンが開始される。タイムアウトになるまでの間に新たなリクエストがWebサーバーに到着すれば、Webサーバはそのコネクションを再度利用しリクエストの処理を完了させる。そして、デフォルト値の状態から再びカウントダウンが始まる。もしカウントダウン中にリクエストがサーバに到着しなければ、コネクションは解放される(図3)。

 ここで問題となるのが「KeepAliveTimeout」の設定値の見積もりである。前述の「MaxClients」とも密接に関係してくることに注意していただきたい。例えばKeepAliveの時間を非常に小さくした場合を考えると、コネクションを維持することができなくなる。

 よって、HTTP/1.0の時と同様、リクエストごとに3ウェイハンドシェイクの手順を行いコネクションの確立・解放を繰り返さざるを得なくなるため、応答時間の悪化を招く危険性が高くなる。しかし、リクエスト処理中のみコネクションが確立されるようになるので、無駄な空コネクションはほとんど存在しない。

 つまり、コネクションを有効に利用できるので、棄却率を小さく抑えることが可能となる。反対に、大きく設定した場合は、コネクションの確立・解放を繰り返す必要がないので、応答時間は改善される。しかし、リクエスト処理が終了しても、利用されない空コネクションが維持されたままとなるので、棄却率が増大する可能性が高くなる。

 次回は、「MaxClients」、「KeepAlive」の設定に密接に関係する、Webサーバの転送ファイルサイズ、新規クライアントとHTTPリクエストの到着について述べ、棄却率や応答時間に及ぼす影響について説明する。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30