Apache HTTP サーバ バージョン 2.4

| 説明: | マルチスレッドとマルチプロセスのハイブリッド型 ウェブサーバを実装したマルチプロセッシングモジュール | 
|---|---|
| ステータス: | MPM | 
| モジュール識別子: | mpm_worker_module | 
| ソースファイル: | worker.c | 
このマルチプロセッシングモジュール (MPM) は、マルチスレッドとマルチプロセスのハイブリッド型サーバを 実装しています。リクエストの応答にスレッドを使うと、 プロセスベースのサーバよりも少ないシステム資源で、 多くのリクエストに応答することができます。 それにもかかわらず、多くのスレッドを持った複数のプロセスを 維持することで、 プロセスベースのサーバの持つ安定性も保持しています。
この MPM を制御するのに使われる最も重要なディレクティブは、
    ThreadsPerChild と
    MaxClients です。
    ThreadsPerChild は
    各子プロセスで用意されるスレッド数を制御して、
    MaxClients は
    起動されるスレッドの総数の最大値を制限します。

 CoreDumpDirectory
 CoreDumpDirectory EnableExceptionHook
 EnableExceptionHook Group
 Group Listen
 Listen ListenBacklog
 ListenBacklog MaxConnectionsPerChild
 MaxConnectionsPerChild MaxMemFree
 MaxMemFree MaxRequestWorkers
 MaxRequestWorkers MaxSpareThreads
 MaxSpareThreads MinSpareThreads
 MinSpareThreads PidFile
 PidFile ReceiveBufferSize
 ReceiveBufferSize ScoreBoardFile
 ScoreBoardFile SendBufferSize
 SendBufferSize ServerLimit
 ServerLimit StartServers
 StartServers ThreadLimit
 ThreadLimit ThreadsPerChild
 ThreadsPerChild ThreadStackSize
 ThreadStackSize User
 User一つの制御用プロセス (親) が子プロセスを起動します。
    子プロセスは
    ThreadsPerChild
    ディレクティブで指定された一定数のサーバスレッドと接続を
    listen するスレッドを一つ作ります。
    Listener スレッドは接続が来たときにサーバプロセスに渡します。
Apache はスペアの、つまりアイドルなサーバスレッドの
    プールを常に維持していて、それらは入ってくるリクエストに
    答えられるように待機しています。
    このようにして、クライアントはリクエストの応答が得られるようになるために
    新しいスレッドやプロセスが生成されるのを
    待たなくてもよいようになっています。
    起動初期時のプロセス総数は、
    StartServers
    ディレクティブで設定されます。稼働中に、
    Apache は全プロセスのアイドルスレッドの合計数を見積もって、
    MinSpareThreads と
    MaxSpareThreads
    で指定された範囲の中にこの数が収まるように fork したり
    kill したりします。この操作は非常に自律的なので、
    これらのディレクティブをデフォルト値から変更する必要は
    めったにないでしょう。
    同時に応答することのできるクライアント数の最大数
    (つまり全プロセス中の総スレッド数の最大値) は
    MaxClients
    ディレクティブで決定されます。
    活動中の子プロセス数の最大値は
    MaxClients を
    ThreadsPerChild で割った
    ものになります。
活動中の子プロセスの数と子プロセス中のサーバスレッドの数の越えられない
    上限を設定するディレクティブが二つあります。これらはサーバを
    完全に停止して、再起動することでしか変更することはできません。
    ServerLimit
     は活動中の子プロセスの越えられない上限を設定し、
    MaxClients ディレクティブ
    の値を 
    ThreadsPerChild の値で割った値以上である
    必要があります。ThreadLimit は
    サーバスレッドの越えられない上限で、ThreadsPerChild ディレクティブの
    値以上である必要があります。
活動中の子プロセス群に加えて、少なくとも一つのサーバスレッドが
    既存のクライアントからの接続を扱っている終了しようとしている
    子プロセスがある可能性があります。終了中のプロセスは MaxClients で指定された数まで
    存在できますが、実際に期待される数はずっと少なくなります。この
    振舞いは各子プロセスを終了させないようにすることで回避できます。
    これは以下の様にして実現できます。
      MaxRequestsPerChild の値を 0 に設定する
      MaxSpareThreads の値を
      MaxClients
      と同じ値にするworker MPM の典型的なプロセス・スレッド制御の
    設定では、次のようになります。
      ServerLimit         16
      StartServers         2
      MaxClients         150
      MinSpareThreads     25
      MaxSpareThreads     75
      ThreadsPerChild     25
    
通常 Unix では親プロセスは 80 番ポートにバインドするために
    root で起動されますが、子プロセスやスレッドは
    もっと低い権限のユーザで Apache によって起動されます。
    User と
    Group ディレクティブは
    Apache の子プロセスの権限を設定するのに用いられます。
    子プロセスはクライアントに送るコンテンツ全てを読めないといけませんが、
    可能な限り必要最小限の権限のみを持っているようにするべきです。
    さらに、suexec
    が使用されていない限り、これらのディレクティブは
    CGI スクリプトで継承される権限も設定します。
MaxRequestsPerChild
    は、古いプロセスを停止して新しいプロセスを起動することによって、
    どの程度の頻度でサーバがプロセスをリサイクルするかを制御します。