ApacheのMPMの概要とチューニング方法についてです。
※目次をクリックすると目次の下部にコンテンツが表示されます。
Prefork MPM
1)Prefork MPMの概要
・prefork MPMは、複数の子プロセスがそれぞれ一つのスレッドとして実行され、それぞれの子プロセスが一つの接続を扱う。
2)設定パラメータ
・StartServers
開始時の子プロセスの数
・MinSpareServers、MaxSpareServers
プール内に維持するスペアのプロセスの最小、最大の数
・ServerLimit
設定可能なサーバプロセス数の上限
・MaxClients
応答することのできる同時リクエスト数。Prefork MPMの場合は、同時に実行できる子プロセスの数
・MaxRequestsPerChild
子プロセスが扱うことのできるリクエストの制限数
3)チューニング上の注意点
・ServerLimitとMaxClients
preforkの場合は同時クライアント数 = サーバプロセス数なので、ServerLimitの設定値は、MaxClientsに設定可能な上限値を設定することになる。
ServerLimit が必要以上に大きな値に設定された場合は、余計な未使用共有メモリが割り当てられてしまう。
・MaxRequestsPerChild
無制限に設定する事も出来るが、適切な高い値を設定するとメモリリークの蓄積をある一定のタイミングで解消するが出来る。
4)処理フローの概要
①親プロセスがリクエスト受信
②親プロセスは子プロセスにリクエストの割当てを試みる。親プロセスと子プロセスは共有プロセスを介してやり取りする。
③プール内にスペアの子プロセスがある場合は、その子プロセスがリクエストを処理する。
④MaxClientsの上限に達していなく、スペアの子プロセスが存在しない場合は、新しい子プロセスが生成され、その子プロセスがリクエストを処理する。
⑤MaxClientsの上限まで子プロセスが実行中の場合は、子プロセスが利用可能になるまでキューで待機する。
⑥リクエスト処理後、MaxRequestsPerChildの上限に達した場合、または、すでにMaxSpareServersの数だけスペアプロセスだけ存在している場合は、その子プロセスは削除される。
・prefork MPMは、複数の子プロセスがそれぞれ一つのスレッドとして実行され、それぞれの子プロセスが一つの接続を扱う。
2)設定パラメータ
・StartServers
開始時の子プロセスの数
・MinSpareServers、MaxSpareServers
プール内に維持するスペアのプロセスの最小、最大の数
・ServerLimit
設定可能なサーバプロセス数の上限
・MaxClients
応答することのできる同時リクエスト数。Prefork MPMの場合は、同時に実行できる子プロセスの数
・MaxRequestsPerChild
子プロセスが扱うことのできるリクエストの制限数
3)チューニング上の注意点
・ServerLimitとMaxClients
preforkの場合は同時クライアント数 = サーバプロセス数なので、ServerLimitの設定値は、MaxClientsに設定可能な上限値を設定することになる。
ServerLimit が必要以上に大きな値に設定された場合は、余計な未使用共有メモリが割り当てられてしまう。
・MaxRequestsPerChild
無制限に設定する事も出来るが、適切な高い値を設定するとメモリリークの蓄積をある一定のタイミングで解消するが出来る。
4)処理フローの概要
①親プロセスがリクエスト受信
②親プロセスは子プロセスにリクエストの割当てを試みる。親プロセスと子プロセスは共有プロセスを介してやり取りする。
③プール内にスペアの子プロセスがある場合は、その子プロセスがリクエストを処理する。
④MaxClientsの上限に達していなく、スペアの子プロセスが存在しない場合は、新しい子プロセスが生成され、その子プロセスがリクエストを処理する。
⑤MaxClientsの上限まで子プロセスが実行中の場合は、子プロセスが利用可能になるまでキューで待機する。
⑥リクエスト処理後、MaxRequestsPerChildの上限に達した場合、または、すでにMaxSpareServersの数だけスペアプロセスだけ存在している場合は、その子プロセスは削除される。
Worker MPM
1)Worker MPMの概要
・worker MPMは、各子プロセスが複数のスレッドを実行し、各スレッドが一つのリクエストを処理する、マルチスレッドモデルを使用する。
・マルチプロセッサーマシンに最適で、メモリ使用量が少なく、prefork MPMよりスケーラビリティに優れる。
・非常に大きなスケーラビリティを必要とするサイトでは、workerなどのスレッド化されたMPMを利用できる一方で、安定性や古いソフトウェアとの互換性を必要とするサイトではpreforkが利用できる。
2)設定パラメータ
・StartServers
開始時の子プロセスの数
・ThreadsPerChild
各子プロセスで生成されるスレッド数。子プロセスは開始時にこれらのスレッドを生成して、その後は生成しない。
・MinSpareThreads、MaxSpareThreads
プール内に維持するスペアのスレッドの最小、最大の数
・ServerLimit
設定可能なサーバプロセス数の上限
・MaxClients
応答することのできる同時リクエスト数。
・MaxRequestsPerChild
子プロセスが扱うことのできるリクエストの制限数
・worker MPMは、各子プロセスが複数のスレッドを実行し、各スレッドが一つのリクエストを処理する、マルチスレッドモデルを使用する。
・マルチプロセッサーマシンに最適で、メモリ使用量が少なく、prefork MPMよりスケーラビリティに優れる。
・非常に大きなスケーラビリティを必要とするサイトでは、workerなどのスレッド化されたMPMを利用できる一方で、安定性や古いソフトウェアとの互換性を必要とするサイトではpreforkが利用できる。
2)設定パラメータ
・StartServers
開始時の子プロセスの数
・ThreadsPerChild
各子プロセスで生成されるスレッド数。子プロセスは開始時にこれらのスレッドを生成して、その後は生成しない。
・MinSpareThreads、MaxSpareThreads
プール内に維持するスペアのスレッドの最小、最大の数
・ServerLimit
設定可能なサーバプロセス数の上限
・MaxClients
応答することのできる同時リクエスト数。
・MaxRequestsPerChild
子プロセスが扱うことのできるリクエストの制限数