[APACHE DOCUMENTATION]

Apache HTTP Server Version 2.0

Apache モジュール worker

説明: マルチスレッドとマルチプロセスのハイブリッド型 ウェブサーバを実装したマルチプロセッシングモジュール
ステータス: MPM
モジュール識別子: mpm_worker_module

概要

このマルチプロセッシングモジュール (MPM) は、マルチスレッドとマルチプロセスのハイブリッド型サーバを 実装しています。リクエストの応答にスレッドを使うと、 プロセスベースのサーバよりも少ないシステム資源で、 多くのリクエストに応答することができます。 さらに、多くのスレッドを持った複数のプロセスを維持することで、 プロセスベースのサーバの持つ安定性を保持しています。

この MPM を制御するのに使われる最も重要なディレクティブは、 ThreadsPerChildMaxClients です。 これらのディレクティブの値を操作することで、 サーバの扱うことのできる全同時コネクション数を定義します。

ディレクティブ

参照

動作方法

プロセスは決まった数のスレッドを持ちます。 負荷への適応はプロセスの数を増減により対応します。

一つの制御用プロセスが子プロセスを起動します。 子プロセスは ThreadsPerChild ディレクティブで指定された一定数のスレッドを作ります。 それから、個々のスレッドがコネクションに対して listen して、しかるべき時に動作します。

Apache はスペアの、つまりアイドルなサーバスレッドの プールを常に維持していて、それらは入ってくるリクエストに 答えられるように待機しています。 このようにして、クライアントはリクエストの応答が得られるようになるために 新しいスレッドやプロセスが生成されるのを 待たなくてもよいようになっています。 Apache は全プロセスのアイドルスレッドの合計数を見積もって、 MinSpareThreadsMaxSpareThreads で指定された範囲の中にこの数が収まるように fork したり kill したりします。この操作は非常に自律的なので、 これらのディレクティブをデフォルト値から変更する必要は めったにないでしょう。 同時に応答することのできるクライアント数の最大数は、 生成されるサーバプロセスの最大数 (MaxClients) と、個々のプロセスで作られるスレッド数 (ThreadsPerChild) の積になります。

通常 Unix では親プロセスは 80 番ポートにバインドするために root で起動されますが、子プロセスやスレッドは もっと低い権限のユーザで Apache によって起動されます。 UserGroup ディレクティブは Apache の子プロセスの権限を設定するのに用いられます。 子プロセスはクライアントに送るコンテンツ全てを読めないといけませんが、 可能な限り必要最小限の権限のみを持っているようにするべきです。 さらに、suexec が使用されていない限り、これらのディレクティブは CGI スクリプトで継承される権限も設定します。

MaxRequestsPerChild は、古いプロセスを停止して新しいプロセスを起動することによって、 どの程度の頻度でサーバがプロセスをリサイクルするかを制御します。


Apache HTTP Server Version 2.0

索引ホーム