Timeout
例えば、Webアプリケーションにおいて、クライアントがサーバー(Apache)に接続した後、サーバーのプログラムが実行され、データベースに対して重いクエリが発行されたとする。
その場合、サーバーはデータベースから応答が来るのを待つ状態になるが、何秒待つか、を定義するのがTimeoutである。
KeepAliveTimeout
サーバーはデータベースから応答が来ると、結果を用いてクライアントにレスボンスを返す。
通常、ここでクライアントとサーバーのネットワーク接続は一旦閉じる。
ただしKeepAliveディレクティブがONになっていると、閉じずに次の接続が来るのを待つのだ。
なぜかといえば、次のコネクションが同じクライアントから来た場合、TCPセッションを再度確立することなく通信できて効率的だからである。
これがKeepAliveの機能である。
そして、この閉じずに待つ時間を何秒にするか?というのが、KeepAliveTimeoutなのだ。
KeepAlive
KeepAliveを使うと、リクエストのたびにTCPセッションを確立する必要がなくなるので、CPU使用率を下げることができるが、次の接続をコネクションを閉じずに待つのでメモリ使用量は上がってしまう。
Apache2.4からはデフォルトONになっている。