HTTP Keep-aliveについて質問です。

特に下記のような設定の中の「KeepAliveTimeout」についてです。

KeepAlive On
MaxKeepAliveRequests html+画像等+α
KeepAliveTimeout (数値)

色々とwebを調べた結果、通常htmlと画像程度の普通のwebサイトであれば、KeepAliveTimeoutの値は1~3くらいで構わないらしいことが分かりました。

さて本題なのですが、圧縮したファイルや動画等ファイルサイズが大きく、画像やHTMLファイルのようにダウンロードが直ぐ終わらないようなデータの配信を行う場合の、KeepAliveTimeoutの適切な設定について教えてください。

ダウンロードに時間がかかることを想定し、HTMLや画像だけの時より長めに設定するべきなのか。
それとも、HTMLファイルをダウンロードした後、即パースされ埋め込まれた動画等は画像やCSSファイル等と同様直ぐにリクエストされるので、やはり1~3程度がいいのか。
または、もっと別の設定がいいのか等。
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/10/08 10:13:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kurukuru-neko No.1

回答回数1844ベストアンサー獲得回数155

ポイント48pt

特にA.47の説明を読めばわかると思いますが、

ダウンロード中のものは関係がありません。

参考URLのように実際のサーバの負荷にあわせて

調整するのがよいと思います。

KeepAlive関連説明

http://www.atmarkit.co.jp/flinux/rensai/apache2_03/apache03b.htm...

日本語のわかりやすい解説 A.47

http://software.fujitsu.com/jp/manual/manualfiles/M050000/B1WN49...

参考URL

http://akalabo.net/archives/2005/09/apachekeepalive.html

id:router

ご回答ありがとう御座います。

ご提示頂いたURL先を読む限り、

Keep-aliveというのはサイズの大きいファイルを配信するのに、特にメリットはないということみたいですね。

短時間に(極端な話同時に)大量のリクエストがあればあるほど、メリットがあるのかなと思いました。

でも、Ajax等によるポーリングを除けば、Webではむしろリクエストは散発的になるので、Keep-aliveは数秒で構わないという事になるのかな。

私が勘違いをしている可能性もあるので、一応もっとご回答を待ってみます。

2006/10/08 07:32:04

その他の回答1件)

id:kurukuru-neko No.1

回答回数1844ベストアンサー獲得回数155ここでベストアンサー

ポイント48pt

特にA.47の説明を読めばわかると思いますが、

ダウンロード中のものは関係がありません。

参考URLのように実際のサーバの負荷にあわせて

調整するのがよいと思います。

KeepAlive関連説明

http://www.atmarkit.co.jp/flinux/rensai/apache2_03/apache03b.htm...

日本語のわかりやすい解説 A.47

http://software.fujitsu.com/jp/manual/manualfiles/M050000/B1WN49...

参考URL

http://akalabo.net/archives/2005/09/apachekeepalive.html

id:router

ご回答ありがとう御座います。

ご提示頂いたURL先を読む限り、

Keep-aliveというのはサイズの大きいファイルを配信するのに、特にメリットはないということみたいですね。

短時間に(極端な話同時に)大量のリクエストがあればあるほど、メリットがあるのかなと思いました。

でも、Ajax等によるポーリングを除けば、Webではむしろリクエストは散発的になるので、Keep-aliveは数秒で構わないという事になるのかな。

私が勘違いをしている可能性もあるので、一応もっとご回答を待ってみます。

2006/10/08 07:32:04
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント22pt

http://yougo.ascii24.com/gh/14/001442.html

通常 HTTP はひとつのファイルごとにコネクションの接続・切断を繰り返しますがこれは負荷の高い動作です。

そのため KeepAlive を設定する事でつなぎっぱなし状態にすればその負荷を減らせると言うのが主な趣旨です。

これはページ中に大量の細かなアイコンなどがある場合にはとても有効ですが、大きなファイルをダウンロードする時には特に関係ありません。


KeepAliveTimeout については「一回のリクエストが終わったあと、もしかしたらクライアントが連続して要求してくるかもしれないのでサーバーはこの時間待つ」というパラメーターなので不必要に長くすると無意味な待機時間でサーバーがいっぱいになります。

特に携帯端末のような KeepAlive に対応していない端末には機能自体が無意味なので Off にする事が推奨されます。


以上から KeepAliveTimeout の値は1~3くらいで構わないと思います。

id:router

ご回答ありがとう御座います。

やはりそういうことなのですね。

2006/10/08 10:10:11
  • id:kurukuru-neko

    >Webではむしろリクエストは散発的になるので

    確率として、MaxKeepAliveRequestsが予測できるので
    あればそれ以上連続した要求がないと仮定できる時間を
    KeepAliveTimeoutに設定すればよいはずですが。
    サーバに同一クライアントから常に繰り返し処理が依頼する
    場合、KeepAliveTimeoutをあまり短くするとプロセスの
    常駐コストと、生成コストのどちらが低いか?
    (プロセスではないかもしれませんが)
    と言うことになります。
    KeepAliveTimeoutより短い間隔でクライアントからの
    要求が発生すると設定しても意味がありません。
    KeepAliveTimeoutより長い間隔でクライアントからの
    要求確立が高い場合設定する意味はあります。

     
  • id:router
    補足ありがとう御座います。

    せっかくコメント頂いたんですが、
    今一つ理解することが出来ませんでした。


    >サーバに同一クライアントから常に繰り返し処理が依頼する場合
    との事なので、通常のブラウジングではなくポーリング等を行っているような状況のお話かと思います。
    プロセスの常駐コストと生成コストの分岐点があるのも、具体的には分かりませんが確かにありそうだと思います。

    しかしどうしても理解できないのは、KeepAliveTimeoutより長い間隔でクライアントからの要求確立が高い場合、の部分です。
    KeepAliveTimeoutより長い間隔の要求ということは、その要求がある時プロセスは終了している事になると思います。
    KeepAliveTimeoutが短すぎると生成コストが常駐コストより高いかも、という話の流れからKeepAliveTimeoutを長めにすべき状況もあるのだろうとは思いつくのですが、それでも要求間隔はKeepAliveTimeoutより短くなければプロセスが終了しているので、長く常駐した上に必要になる前に消えるという事に、ならないのでしょうか。
    これがどうしても分からなかった部分です。
    説明が長くなってしまいましたが、良かったら教えて下さい。


    これを書いていてふと思ったのは、KeepAliveTimeout以内に2度目の要求があった場合、常駐プロセスで処理することになって、KeepAliveTimeoutはその2度目の要求から数えなおしてくれるんだろうか・・・
  • id:kurukuru-neko

    >KeepAliveTimeoutより長い間隔でクライアントからの
    >要求確立が高い場合

    当然プロセスは消滅していることになります。
    この場合、例えば30秒以上の間隔の要求が予想
    される場合にKeepAliveTimeoutが15秒がとした場合、
    クライアントの要求が完了した後 平均7.5秒程度の時間無駄
    にプロセスを維持する可能性があるので、より短い
    KeepAliveTimeoutにより短い値を設定するより早く
    無駄な資源を解放できると言う意味があると言う事になります。


  • id:b-wind
    >KeepAliveTimeoutより長い間隔でクライアントからの
    >要求確立が高い場合
    細かい話ですが、プロセスは消滅しません。コネクションが消滅するだけです。

    理論上はすべてのコネクションを接続しっぱなしにしておくのが最速かと思われます。
    ただ、現実問題 Web サーバーは多くのクライアントから同時に接続を受け付けているわけでそんな事をすればあっという間にCPUとメモリ資源を食い尽くしてダウンしてしまいます。
    サーバー資源とコネクションの永続化のバランス点として一般的には短い方が効率がよいと言うだけです。

    極論すれば特定10端末からの接続しかありえない状況であれば、KeepAliveTimeout は無限でも構わない事になります。(実際にはそのほかの要因もあるのでそういうわけにもいきませんが)
  • id:kurukuru-neko

    >サーバー資源とコネクションの永続化のバランス点として
    >一般的には短い方が効率がよいと言うだけです。
    ↑システムがより高い限界近い負荷で動作するようになった
     場合、従来以上の想定以上の要求を受け入れ。
     システム特性によってはサービスに何らかの不具合を発生
     原因となる可能性があります。実環境では慎重に調整
     する事をお勧めします。
    (MaxClients未満で過負荷)

     システムに余力があるのであればあえていじる必要は
     ないかと思います。

    >圧縮したファイルや動画等ファイルサイズ

    質問に関係ありませんが、趣味としては
     大容量のデータ配布をする場合、WEB系の処理と
     大容量データの処理と切り離した違うサーバ(論理・物理)
     で分けて処理したい気分ですが。
  • id:router
    色々とご説明ありがとう御座います。
    <br />
    > 例えば30秒以上の間隔の要求が予想
    > される場合にKeepAliveTimeoutが15秒がとした場合、
    > クライアントの要求が完了した後 平均7.5秒程度の時間無駄
    > にプロセスを維持する可能性があるので、より短い
    > KeepAliveTimeoutにより短い値を設定するより早く
    無駄な資源を解放できると言う意味がある
    <br />
    なるほど分かりました。
    一般的なwebサイトの場合、
    各ページに付随する画像等は数秒のうちに要求が来るので、
    2回目のページへのアクセスがどのくらいに来るかを考えると、
    ユーザによってですがちゃんとページを読んだりしているならばそれなりの時間がかかりますね。
    であれば、さっさとタイムアウトさせてしまった方が良いので、
    一般的にKeepAliveTimeoutは短くとなるわけですね。
    <br />
    > 細かい話ですが、プロセスは消滅しません。コネクションが消滅するだけです。
    プロセスは残っているなら、やはりにKeepAliveTimeoutは短くして接続を終わらせた方がいいって事になるのかな。
    と思いますが、ここまで来るとしっかりと調べないと一概にそうとも言えないケースもあるんでしょうね。
    <br />
    > システムがより高い限界近い負荷で動作するようになった
    > 場合、従来以上の想定以上の要求を受け入れ。
    > システム特性によってはサービスに何らかの不具合を発生
    > 原因となる可能性があります。
    同じユーザが割りと短い間隔で要求を発生することが多いサイトなんかは、KeepAliveTimeoutをその間隔をカバーする形で設定したほうがよさそうですね。
    もしくはポーリングをしているとかの場合。
    システム特性というのはこの辺の事なのかなと思っていますが、あまり自信はありません。
    <br />
    > システムに余力があるのであればあえていじる必要はないかと思います。
    デフォルトの15秒は、恐らく殆どの場合で無駄になっていそうなので、とりあえず一般的に採られる数秒を自分のデフォルトにして、そこから状況に合わせて調整するようにしようかなと思います。
  • id:kurukuru-neko
    >システム特性というのはこの辺の事なのかなと

    例1:(接続に対してなんらかのリソース割り当てを行う場合)
    ログインしている間一定期間リソースを
    保持するサービスがあるとします。
    リソースを保持する期間は、例えば自動ログオフする
    時間15分程度とした場合。
    従来は、KeepAliveTimeoutのせいで過負荷時は新規に
    ログイン数は抑えられていましたが、より沢山のサービス
    要求が確立出来るようになり同時にログインする数が
    増えました。 結果として管理するリソースが増加。

    例2:(接続数オーバー)
    比較的繰り返し、処理を要求する画面遷移を
    している場合、KeepAliveTimeoutが短くなりMaxClients
    付近まで接続数が推移していたため、WEBページをアクセス 
    するとエラーページが頻発して表示されるようになる。

    例3:(処理が重い場合)
    遅い回線、端末で端末で処理するJavaScriptや、画像
    などの処理が重くて遅い場合、端末が次の要求を出す前に
    KeepAliveTimeoutになり。さらに遅くなる。

    ==========================================
    設定の前後でCPU/RAM/接続端末数/ログイン数/IO負荷率
    /回線利用率等をモニターしてしておけば問題が発生する
    兆候が何かあるはずです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません