ApacheのMPMの概要とチューニング

ApacheのMPMの概要とチューニング方法についてです。
 

(1)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の数だけスペアプロセスだけ存在している場合は、その子プロセスは削除される。
 

(2)Worker MPM


 
1)Worker MPMの概要
 
・worker MPMは、各子プロセスが複数のスレッドを実行し、各スレッドが一つのリクエストを処理する、マルチスレッドモデルを使用する。
 
・マルチプロセッサーマシンに最適で、メモリ使用量が少なく、prefork MPMよりスケーラビリティに優れる。
 
・非常に大きなスケーラビリティを必要とするサイトでは、workerなどのスレッド化されたMPMを利用できる一方で、安定性や古いソフトウェアとの互換性を必要とするサイトではpreforkが利用できる。
 
2)設定パラメータ
 
・StartServers
開始時の子プロセスの数
 
・ThreadsPerChild
各子プロセスで生成されるスレッド数。子プロセスは開始時にこれらのスレッドを生成して、その後は生成しない。
 
・MinSpareThreads、MaxSpareThreads
プール内に維持するスペアのスレッドの最小、最大の数
 
・ServerLimit
設定可能なサーバプロセス数の上限
 
・MaxClients
応答することのできる同時リクエスト数。
 
・MaxRequestsPerChild
子プロセスが扱うことのできるリクエストの制限数

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です