実行環境
・CentOS6 64bit
・Apache 2.2
やってみたこと
ApacheのKeepAliveの設定および、挙動について質問です。
ApacheのKeep-Alive関連の設定を下記のように設定しました。
KeepAlive On MaxKeepAliveRequest 100 KeepAliveTimeout 10
この設定についての私の解釈は、下記のようになります。
- KeepAlive設定が有効(TCPコネクションの使い回し)
- 一つのTCPコネクションにつき、100回までリクエストを処理する。
(100回リクエストを処理して、続けて同一クライアントからリクエストがきた場合、新たにTCPコネクションを確立) - 10秒間、リクエストが来なかったTCPコネクションは切断する。(10秒間はESTABLISHED状態を維持)
この設定で、Webブラウザから、下記のような検証曜Webページにアクセスします。
html
1<html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4 <link rel="stylesheet" href="./css/file.css" type="text/css"/> 5 <title>TEST PAGE</title> 6 </head> 7 <body> 8 <p>this is test page</p> 9 <img src="./img/pic1.gif" /></br> 10 <img src="./img/pic2.gif" /></br> 11 </body> 12</html>
アクセス時のネットワーク状況を、
watch -n 1 "netstat -ant"
コマンドで監視したところ、下記のようなイメージで、
2つのESTABLISHEDなTCPコネクションが確立されていました。
tcp 0 0 [Server IP Addr]:80 [Client IP Addr]:62385 ESTABLISHED tcp 0 0 [Server IP Addr]:80 [Client IP Addr]:62383 ESTABLISHED
また、Webブラウザ(Firefox)で、「F12」から開発者ツールを起動し、
ヘッダの状態を確認したところ、
Connection:Keep-Alive
Keep-Alive:timeoout=10 max=100
となっているリクエストが2つ存在したため、
たしかに、TCPコネクションが2つ確立され、
それぞれにKeepAliveの設定値が反映されていることがわかります。
※ 他のリクエストは、timeout=10 max=99(or 98)でした
疑問点:思っていた動作と違う
今回、検証したWebページは、
htmlファイル ✕ 1
cssファイル ✕ 1
imgファイル ✕ 2
なので、クライアントからサーバーへ送られるリクエスト数は4つになるはずです。
であれば、MaxKeepAliveRequestsの設定値が10なので、
一つのTCPコネクションで、全てのリクエストを捌けるはずだと考えていました。
(つまり、ESTABLISHEDのコネクションが一つになるはず)
しかし、実際は何故か、2つのTCPコネクションが確立され、
それぞれにKeepAliveの設定値が振られているように見えます。
質問したいこと
質問したいことですが、
今回の検証では、私が思っていた動作にはなりませんでした。
つまり私の解釈の何かが間違っていると思っているのですが・・・
KeepAliveの設定や挙動に関して、
私の解釈が間違っている点、ならびに正しい解釈等、
わかる方がいらっしゃいましたらご助言いただきたいです。
とてもわかりにくい説明となっており、
大変恐縮ですが、よろしくお願い致します。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/18 06:19