2009年10月1日木曜日

Apacheの駆動プロセス数について

Apacheのプロセス数の制御は以下のディレクティブで行う。
  • ServerLimit
  • MaxClients
  • MinSpareServer
  • MaxSpareServer
  • StartServers
ServerLimitは、起動する子プロセス数の最大値を決める。
デフォルトでは200000。(/httpd-2.2.13/server/mpm/prefork/prefork.c:84)

MaxClientsは、駆動する子プロセス数の最大値を決める。
(preforkの場合、ServerLimitと同意になる)
ServerLimitより小さい数値である必要があり、デフォルトでは256。(/httpd-2.2.13/server/mpm/prefork/prefork.c:77)

MinSpareServerMaxSpareServerは、アイドルプロセス数の最小値、最大値を決める。
アイドルプロセスとは、クライアントからの要求を受ける前にあらかじめforkしておく子プロセス。
あらかじめforkしておくことで、要求発生時に素早く処理ができる。
MinSpareServerのデフォルト値は5 (/httpd-2.2.13/server/mpm/prefork/mpm_default.h:46)
MaxSpareServerのデフォルト値は10 (/httpd-2.2.13/server/mpm/prefork/mpm_default.h:40)

StartServersはApache起動後すぐ起動する子プロセス数。
MinSpareServerと同値にするのが通常だが、異なる値も指定出来る。
ただし、どのような値を指定しても、MinSpareServerとMaxSpareServerの間に収まるように調整される。
StartServersのデフォルト値は5 (/httpd-2.2.13/server/mpm/prefork/mpm_default.h:32)


子プロセスの総数は、MaxClientsより多くはならないため、処理中のプロセス数が増大すると、アイドルプロセスがMinSpareServerより少なくなる場合がある。(httpd-2.2.13/server/mpm/prefork/prefork.c:796 perform_idle_server_maintenance)
アイドルプロセスが0、つまり処理中のプロセスがMaxClientsに達すると、以下のエラーが出力される。
"server reached MaxClients setting, consider raising the MaxClients setting" (/httpd-2.2.13/server/mpm/prefork/prefork.c:867)

各ディレクティブの詳細は、apacheのマニュアルを参照の程

※動作モードはmpm_preforkに限る
※source ver : Apache 2.2.13

0 件のコメント: