アプリの2つの運転パターンPerforkとWorkカー


Apache HTTPの「'keep alive」問題を改善するために、2.0バージョンにMPM(Multi)を導入しました. -Processing Modules,マルチパス処理モジュール)ここでは主にMPM(Multi)について説明します. -Processing Modules,複数の処理モジュール)の基本的な動作原理と応用上の制約.
  
以下のコードを実行します.
$ ./configure --helpグループ mp
次のように表示します.
--with-mpm=MPM
Choose the process モデル for Apache ト アメリカ.
MPM={ベロウォーカー}prefork|mpmt| 2| perchild𞓜leader𞓜threadpool}
BeOSbeosNetwarempm_netwareOS/2mpmt_os2UnixpreforkWindowsmpm_winnt      leaderとthreadpoolは共にworkの変形に基づいており、また実験段階にあり、本稿では主にpreforkとworkの2つのモード動作原理を説明する. ( 詳細については、Appache公式文書を参照してください.
[url]http://httpd.apache.org/docs/2.2/mod/prefork.html[/url]
[url]http://httpd.apache.org/docs/2.2/mod/worker.html[/url] 
)
 
preforkの動作原理と配置
「--with-mpm」で明示的にMPMを指定しないと、preforkはUnixプラットフォーム上のデフォルトのMPMです.それに採用されているプレパイ出産プロセスもそうです. Apache 1.3で採用されたモード.prefork自体はスレッドに使用されておらず、2.0版は1.3版と互換性を保つために使用されている.一方、preforkは個々のサブプロセスで異なる要求を処理しており、プロセス間は互いに独立しており、これは最も安定したMPMの一つとなっている.
preforkを使うなら、makeでコンパイルします. installをインストールした後、「httpd」を使います. -l”で現在使用されているMPMを決定すると、prefork.cが見られるはずです. MPMは、このように類推する).
       デフォルトで生成されたhttpd.com nfプロファイルには、以下の構成段が含まれています.
<IfModule prefork.cc>;
StartServers 5
MinSpare Servers 5
MaxSpare Servers 10
MaxCients 150
MaxRequests PerChild 0
;
preforkの動作原理は、コントロールプロセスが最初に「StartServers」というサブプロセスを確立した後、MinSpareServersの設定を満たすためにプロセスを作成し、一秒を待って2つを作成し、もう一秒を待って4つを作成し続けることです.このように指数レベルで作成のプロセス数を増加して、最大で毎秒32個までです. MinSpareServersが設定した値までです.これはプレ派生の由来です.このモードは要求が来た時に新たなプロセスを生成する必要がなく、システムオーバーヘッドを低減して性能を向上させることができます.
MaxSpareServersは最大の空きプロセス数を設定しています.空きプロセス数がこの値より大きいと、Apacheは自動的に余分なプロセスを落とすことができます.この値はあまり大きくしないでください.ただし、設定値がMinSpare Serversより小さい場合、Apacheは自動的にMinSpare Servers+1に調整します.
MaxRequest sPerChildは、各サブプロセスの処理可能な要求数を設定しています.各サブプロセスは、「MaxRequests PerChild」を処理しています. つの要求が自動的に破棄されます.0は無限を意味します.すなわち、サブプロセスはいつまでも廃棄されないということです.デフォルトを0とすると、各サブプロセスはより多くの要求を処理することができますが、0以外の値を設定すると、2つの重要な利点があります.
◆ 予期しないメモリの漏えいを防ぐことができます.
◆ サーバーの負荷が低下すると自動的にサブルーチン数が減少します.
MaxClientsはこれらのコマンドの中で最も重要な一つであり、Apacheが同時に処理できるように設定されている要求は、Appacheの性能に最も影響を与えるパラメータです.そのデフォルト値です. 150は十分ではありません.要求総数がこの値に達したら(psを通じてもいいです. -efグループ http|wc -lで確認しますその後の要求は、処理済みの要求が完了するまで待機します.これはシステムリソースがまだ多く残っていますが、HTTPのアクセスが遅い主な原因です.システム管理者はハードウェア構成と負荷状況によって、この値を動的に調整することができます.理論的にはこの値が大きいほど、処理可能な要求が多くなりますが、Apacheのデフォルトの制限は256より大きくなりません.この値は256より大きいと設定されています. Appacheは起動できません.実は256は荷重が少し重いサイトにも足りないです.Appacheでは 1.3では、これはハードリミットです.この値を大きくするには、「configur」の前に手作業で修正したソースコードツリーの下のsrc/include/httpd.hで検索しなければなりません. 256、「菗define」を発見します. HARDUSERVERMIT 256"この行です.256を増大させる値に変えて(4000のようです)、Appacheを再コンパイルすればいいです.Appacheで. 2.0で新たにServerLimitコマンドを追加しました.Appleを再コンパイルする必要がないので、MaxClientsを大きくすることができます.以下は筆者のprefork配置段です.
<IfModule prefork.cc>;
StartServers 10
MinSpare Servers 10
MaxSpare Servers 15
ServerLimit 2000
MaxCients 1000
MaxRequests PerChild 10000
;
Server limitsの説明は参照してください.
[url]http://httpd.apache.org/docs/2.2/mod/mpm_common.html#serverlimit[/url]
 
perforkとWorkの2つのモードで定義が異なります.
ウォーカーの動作原理と配置
preforkに対してworkは2.0です. 新しいマルチスレッドとマルチプロセスのハイブリッドモデルをサポートするMPMです.スレッドを使って処理するので、相対的な大容量の要求を処理できます.システムリソースのオーバーヘッドはプロセスベースのサーバーより小さいです. ウォーカーも多プロセスを使用して、プロセス毎に複数のスレッドを生成して、プロセスサーバによる安定性を獲得します.このようなMPMの働き方は、Appacheとなります. 2.0の発展傾向.
configureで -with-mpm=worker後、makeコンパイル、makeを行います. installをインストールします.デフォルトで生成されたhttpd.com nfには以下のような構成があります.
<IfModule ウォーカー.
StartServers 2
MaxCients 150
MinSpare Threads 25
MaxSpare Threads 75
Threads PerChild 25
MaxRequests PerChild 0
;
ウォーカーの動作原理は、マスタープロセスによって「StartServers」のサブプロセスが生成され、各サブプロセスには固定的なThreadsPerChildが含まれている. スレッド数は、各スレッドが独立して要求を処理します.また、要求が来た時にスレッドを生成しないために、MinSpareThreadsとMaxSpare Threadsは最小と最大の空きスレッド数を設定しています.MaxClientsはすべてのサブプロセスのスレッド総数を設定しています.既存のサブプロセスのスレッド総数が負荷を満たしていない場合、制御プロセスは新しいサブプロセスに派生します.
MinSpare ThreadsとMaxSpare Threadsの最大デフォルト値はそれぞれ75と250です.この二つのパラメータはApacheの性能にあまり影響がありません.実際の状況に応じて調整できます.
Threads PerChildはウォーカーです. MPMでは、パフォーマンスに関する最も近いコマンドです.ThreadsPerChildの最大デフォルト値は64です.負荷が大きいと64も足りません.この場合は、明示的に使用します. ThreadLimitコマンドは、最大のデフォルト値は20000です.上記の2つの値は、ソースツリーserver/mpm/worker/worker.ccの下の2つの行にあります.
同前 DEFAULTUTHREADULIMIT 64
同前 MAXギャラクシー 20000
この2行はThreadsPerChildとThreadLimitの制限数に対応しています.configurの前に64を希望の値に変更したほうがいいです.この2つの値を高すぎないようにして、システムの処理能力を超えないようにしてください.Apacheが起動しないので、システムが不安定になります.
Workカーモードで同時に処理できる要求の総数は、サブプロセスの総数にThreadsPerChildの値を乗じて決定されたもので、MaxClientsに相当するはずです.負荷が大きいと、既存のサブプロセス数が満たされない場合、コントロールプロセスは新しいサブプロセスに派生します.デフォルト最大のサブプロセスの総数は16で、増大する時にも明示的な声明が必要です.ServerLimit(最大値は20000です.)この二つの値はソースツリーserver/mpm/worker/worker.cの中の次の二つの行にあります.
同前 DEFAULTU(uSERVERMIT) 16
同前 MAXシリーズ 20000
なお、明示的にServerLimitを宣言した場合、ThreadsPerChildを乗じた値はMaxClientsに等しい値でなければなりません.MaxClientsはThreadsPerChildの整数倍でなければなりません.そうでなければ、Apacheは自動的に対応する値に調整されます.以下は筆者の値です. ウォーカーの設定セグメント:
<IfModule ウォーカー.
StartServers 3
MaxCients 2000
ServerLimit 25
MinSpare Threads 50
MaxSpare Threads 200
ThreadLimit 200
Threads PerChild 100
MaxRequests PerChild 0
;
適用上の制約:
これまではMPMとmodslモジュールは互換性がありません.両方は同時に動作しません.