ぺーぺーSEのブログ

備忘録・メモ用サイト。

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
  • 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