自分用のメモなので端折り書きです。すみません。
Webサーバにおけるkeepaliveとは
- TCP/IPだと1度のリクエストとレスポンスごとにTCPコネクション貼り直す
※データを転送する前にはコネクションを確立するというプロセスがある。いきなりリクエストを投げつけて受け取るわけではない。- 勿体無いので一回貼ったコネクションは使いまわそう -> keepalive
具体的に言うと、一つのページの中で画像とかの素材を読み込んで… みたいなので細かくリクエストが発生する場合とか効きそう、という想定があるらしい- コネクション張っている = リクエストを待ち受ける以外何もしていないスレッドやプロセスがある、ということなのでコネクションをずっと維持していればいいと言うものでもない
- 1回通信を実行した後(=1回分レスポンスを返してから)、どの程度サーバが待ち受けているか、であって、1回分のレスポンスにかけてよい最大時間ではない
引用元: https://woshidan.hatenadiary.jp/entry/2017/08/21/222904
どうやってコネクションを貼り続けているかというと、なんか定期的に信号を送り合って途切れないようにしているっぽい。
keepAliveにすることで通信の効率化(スピード向上)が期待される。
同時接続数とは
「リクエストに応答するために作成される 子プロセスの最大個数」です。
スレッドを用いるサーバではクライアントに対応できるスレッドの最大個数、スレッドを用いないサーバではクライアントに対応できる子プロセスの最大個数になります。
1つの子プロセスは1つのリクエストに応答するために働きますから、サーバーは最大(Max)MaxClients個のクライアント(Client)からのリクエストに応答するために働くことが出来るという事になります。
リクエストへの応答が終わった後、それに使われたコネクションが解除されるまでには、ある程度の時間がかかります。
また、リクエストのためのコネクションは、サーバ側で待ち列(キュー)に保持されたりします(キューにある間はコネクションはあっても、応答するための子プロセスに割り当てられていない状態になります)。
そのため、コネクションの総数がMaxClientsを超える場合があります。逆に言うとMaxClientsはコネクションの総数の上限ではないという事です。
引用元:https://teratail.com/questions/40045
keepAliveを不要に長い時間に設定している、かつclose:connectionのリクエストを行わないと、不要になったコネクションが残りっぱなしになり、同時接続数の上限に達したりするので要注意。