helen's blog

ずっとおもしろいことしてたいな。

apacheのMPM

MPM(マルチプロセッシングモジュール)

Apache2.0でサーバーデーモンの実行部分がモジュール化されたもの
apacheのリクエストの処理方法を決める

worker:mpm_worker_module(worker.c)

  • 非常に大きなスケーラビリティが必要なサイトで使える
  • マルチスレッドとマルチプロセスのハイブリッド型サーバ
  • 1つの制御用プロセスが子プロセスを起動
  • 子プロセスは指定された一定数のサーバスレッドと接続をlistenするスレッドを1つ作成
  • Listnerスレッドは接続がきたらサーバープロセスに渡す
  • スレッドによってプロセスベースよりも少ないシステム資源で多くのリクエストに応答可能
  • 多くのスレッドを持った複数のプロセスを維持し、プロセスベースのサーバの安定性を保持

prefork:mpm_prefork_module(prefork.c)

  • 安定性や古いソフトウェアとの互換性を必要とするサイトで使う
  • スレッドセーフでないライブラリとの互換性を保つためにスレッドを避けたい時に
  • ディレクティブは基本デフォルト値で良い
  • メモリが限られている時はMaxClientsを減らす
  • 一つのコントロールプロセスがコネクションに対してlistenし、しかるべき時に応答する子プロセスを起動

perchild(mpm_perchild_module:perchild.c)

  • 子プロセスごとにスレッドの生成終了を行い、スレッドで調節する
  • 合計は常にMaxSpareThreadsを下回る
  • プロセスごとに異った uid/gid を割りあてることができる
  • プロセス全体のうちuid/gidごとに何個のプロセスを割りあてるか設定可能
  • VirtualHost ごとにプロセスの数を変更できる

ディレクティブ

ServerLimit

設定可能なサーバプロセス数の上限
必要以上に大きな値に設定されると余計なメモリが割り当てられる
大きすぎるとApacheは起動しないか不安定になる
デフォルト以上に設定が必要なときのみ使用

StartServers

起動時に生成される子サーバプロセスの数
workerのデフォルト値は3で基本調整しない

MaxClients

同時に応答することのできるリクエスト数

MinSpareThreads

リクエストに応答するアイドルスレッド数の最小値
workerのデフォルト値は75でサーバ全体で監視
十分な数なければ、 この数よりも大きくなるまで 新しい子プロセスが生成される

MaxSpareThreads

アイドルスレッドの最大数
workerのデフォルト値は250でサーバ全体で監視
多すぎる場合はこの数字よりも少ない数になるまで子プロセスを終了する

ThreadsPerChild

子プロセスそれぞれに生成されるスレッド数
workerではサーバの通常負荷を十分扱える程度にスレッド総数を多くする

MaxSpareServers

アイドルな子サーバプロセスの最大個数
アイドルプロセス超過時は親プロセスが超過プロセスをkill
重いサイトではこの値を調整する
大きくしないほうがいい

MinSpareServers

アイドルな子サーバプロセスの最小個数
この値より小さい数アイドル状態であれば親プロセスは最高1秒に1個子プロセスを生成する
大きくしないほうがいい

NumServers
  • 同時に起動している子プロセスの総数
  • サイト全体に来るリクエスト全てを十分扱える程度に大きな数に設定しておく

マルチプロセッシングモジュール (MPM) - Apache HTTP サーバ

あんまり触りたくないな( ′◡‵ )