Apacheのevent MPMのチューニング

preforkからeventに乗り換えるとチューニングの考え方が少し変わるので簡単にメモ。

event MPMではまずApacheの子プロセス(以下プロセス)が複数生成され、
さらに各プロセスの中にWorker Thread(以下スレッド)が複数生成されるイメージ。

設定値の意味は以下のようになる

<IfModule mpm_event_module>
  ServerLimit               8 #プロセス数の最大値
  StartServers              3 #プロセス数の初期値
  MinSpareThreads         192 #空きスレッド数の最小値(下回ったら増やす)
  MaxSpareThreads         384 #空きスレッド数の最大値(上回ったら減らす)
  ThreadsPerChild          64 #プロセスあたりのスレッド数
  MaxRequestWorkers       512 #同時に処理できる最大数
  MaxConnectionsPerChild 5000 #プロセスが再起動までに処理するリクエスト数
</IfModule>
  • MaxRequestWorkersは最大スレッド数(ServerLimit×ThreadsPerChild)以下にしておくこと。
    スレッド数以上のリクエストが来ると困る。
  • MinSpareThreadsは初期スレッド数(StartServers×ThreadsPerChild)以下にしておくこと。
    初期スレッド数以上の空きスレッドが必要だと、起動直後にスレッド追加しなければならなくて無駄。
  • MinSpareThreadsMaxSpareThreadsThreadsPerChildの倍数になっていた方が良さそう。