MPMの設定

Apache2.4よりMPMの切り替えがモジュールで変更可能になり、
preforkworkerに加えてeventが追加されています。

prefork

スレッド処理方式を行なわず、コネクションに対して親プロセスより子プロセスをforkする事でリクエストを処理します。
スレッドセーフでないライブラリとの互換性をとるために、スレッドを避ける必要のあるサイトでは、このモジュールの使用が適切。
あるリクエストで発生した問題が他のリクエストに影響しないように、個々のリクエストを単離するのにも、最適。

主な制御パラメータ

StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 256
MaxRequestWorkers 256
MaxConnectionsPerChild 0

worker

マルチスレッドとマルチプロセスのハイブリッとMPM
preforkと違い、1スレッドを1プロセスで処理する。

主な制御パラメータ

ServerLimit 16
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25

event

ひとつのプロセスで複数のリクエストを処理するらしい。
preforkにしろworkerにしろkeep-aliveを有効化したときに新しい接続が来た場合は新しいプロセスを立ち上げて処理していて、
keep-alive待ちのプロセスはタイムアウト待ちまで待ち続けるという事が起きていたが、
eventではkeep-alive周りの処理を整理し、HTTPに関してはひとつのプロセスで複数の処理を行なえる。

ThreadsPerChild = 10
ServerLimit = 4
AsyncRequestWorkerFactor = 2
MaxRequestWorkers = 40

ThreadsPerChild
プロセスの開始時に作成される初期スレッド値。

AsyncRequestWorkerFactor
スレッド毎の同時接続数制限。

MaxRequestWorkers
最大同時スレッド数。
昔でいうところのMaxClients
この値はThreadsPerChildの整数倍の数であえる必要がある。

AH00513: WARNING: MaxRequestWorkers of 85 is not an integer multiple of
 ThreadsPerChild of 10, decreasing to nearest multiple 80,
 for a maximum of 8 servers.

ServerLimit
プロセスの設定可能上限
ThreadsPerChildServerLimitの乗数がMaxRequestWorkersくらいを目安に設定。
MaxRequestWorkersより大きい値は設定しない。

MaxRequestWorkers = ThreadsPerChild * ServerLimit

最大接続数の計算

max_connections = (ThreadsPerChild + (AsyncRequestWorkerFactor * idle_workers)) * ServerLimit
                = (10 + (2 * 10)) * 4 = 120

max_connections = (AsyncRequestWorkerFactor + 1) * MaxRequestWorkers
                = (2 + 1) * 40 = 120

idle_workersは実際のサーバ上アイドルプロセス数のこと。動的に変動する部分。
サービスイン前はThreadsPerChildと同じ値になる。

最大接続数を256くらいとしたい場合、MaxRequestWorkersServerLimitを調整するのがいいのか。

results matching ""

    No results matching ""