Apacheの多重度
共通
MPM
Apache 2.xはMPM(Multi-Processing Modules)をサポートしている。
MPMにはworkerとpreforkがある。
Apache MPM worker
workerは複数の子プロセスを起動し、さらにその子プロセスは複数のスレッドを持つ。
1つのスレッドが1つのコネクションを扱う。
workerはpreforkに比べメモリ使用効率がよく、highトラフィックな場合に良い。
Apache MPM prefork
preforkは複数の子プロセスを起動し、子プロセスは1つのスレッドを持つ。
1つの子プロセスは1つのコネクションを扱う。
preforkの方がスピード面でworkerに勝るが、メモリ使用効率が悪い。
preforkはスレッドアンセーフ・マルチスレッド未対応なサードパーティモジュールを使用する際に選択する。
Apache 2.2
パフォーマンスチューニングについてhttp://httpd.apache.org/docs/2.2/ja/misc/perf-tuning.html
Apache MPM 共通ディレクティブ
http://httpd.apache.org/docs/2.2/ja/mod/mpm_common.html
Apache MPM worker
http://httpd.apache.org/docs/2.2/ja/mod/worker.html
Apache MPM prefork
http://httpd.apache.org/docs/2.2/ja/mod/prefork.html
Apache MPM workerのチューニング
主にThreadsPerChildとMaxClientsで子プロセス・スレッド数を調整する。
- StartServers
- 起動時に生成される子プロセスの数
- デフォルト:3
- ※preforkの場合は5
- 起動時に生成される子プロセスの数
- ThreadsPerChild
- 1つの子プロセスで生成されるスレッド数
- 子プロセスは開始時にこれらのスレッドを生成して、その後スレッド数が上下することはない
- デフォルト:25
- 1つの子プロセスで生成されるスレッド数
- ThreadLimit
- ThreadsPerChildに設定可能な上限値
- MaxClients
- リクエストに応答するために生成されるスレッドの合計の最大数
- preforkの場合と意味が異なるので注意が必要
- デフォルト:256
- リクエストに応答するために生成されるスレッドの合計の最大数
- ServerLimit
- MaxClientsに設定可能な上限値
- ThreadLimitと組み合わせて、MaxClientsに設定可能な上限値
- workerではプロセス数を定義できないのでこのへんでコントロールする(あとはApacheがよろしくやってくれる)
Apache MPM preforkのチューニング
Apache親プロセスがリクエストに応答する子プロセスをどのように生成するかは、StartServers、MinSpareServers、MaxSpareServers、MaxClientsで調整する。
- StartServers
- 起動時に生成される子プロセスの数
- デフォルト:5
- ※workerの場合は3
- 起動時に生成される子プロセスの数
- MinSpareServers
- アイドルな子プロセスの最小数
- デフォルト:5
- アイドルな子プロセスの最小数
- MaxSpareServers
- アイドルな子プロセスの最大数
- デフォルト:10
- アイドルな子プロセスの最大数
- MaxClients
- リクエストに応答するために起動される子プロセスの最大数
- workerの場合と意味が異なるので注意が必要
- デフォルト:256
- リクエストに応答するために起動される子プロセスの最大数
- ServerLimit
- MaxClientsに設定可能な上限値
Apache 2.2
パフォーマンスチューニングについてhttp://httpd.apache.org/docs/2.4/ja/misc/perf-tuning.html
Apache MPM 共通ディレクティブ
http://httpd.apache.org/docs/2.4/ja/mod/mpm_common.html
Apache MPM worker
http://httpd.apache.org/docs/2.4/ja/mod/worker.html
Apache MPM prefork
http://httpd.apache.org/docs/2.4/ja/mod/prefork.html
Apache2.4との違いについてはまだちゃんと調べてない。
下記のようにパラメータ名が変わっている気がする。
Apache 2.2 | Apache 2.4 |
---|---|
MaxClients | MaxRequestWorkers |
MaxRequestsPerChild | MaxConnectionsPerChild |