Apache2.2 prefork.c ServerLimit MaxClients
Apache2.2系のデフォルト
<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule>
ServerLimit、MaxClientsのデフォルト上限値は、200000。
# httpd -t WARNING: ServerLimit of 400000 exceeds compile time limit of 200000 servers, lowering ServerLimit to 200000. WARNING: MaxClients of 400000 exceeds ServerLimit value of 200000 servers, lowering MaxClients to 200000. To increase, please see the ServerLimit directive.
とのことなので、コンパイル時指定でServerLimitの上限が変更可能。
MaxClientsは、ServerLimitの上限が上限になる。
ServerLimit、MaxClientsと同じようなものがなぜあるのだろう。
# ServerLimit: maximum value for MaxClients for the lifetime of the server # MaxClients: maximum number of server processes allowed to start
とあって、ServerLimitの設定値をconfで変更した時に、反映させるにはApacheのstop start が必要で、
MaxClientsの設定値変更の反映はreloadで可能となっている。
設定反映の確認は、server-infoを有効にして、http://servername/server-info で確認。
Server Settings
Server Version: Apache/2.2.3 (CentOS)
Server Built: Apr 4 2010 17:19:54
Module Magic Number: 20051115:3
Hostname/port: 192.168.24.121:80
Timeouts: connection: 120 keep-alive: 120
MPM Name: Prefork
MPM Information: Max Daemons: 50000 Threaded: no Forked: yes
のように表示される MPM Information: Max Daemons:の数値を見る。
CentOS5.5 Apache2.2.3で確認。
Comments
ServerLimit設定値とメモリ
preforkでの比較。Apacheへのアクセスはない状態。
ServerLimit 100000
ServerLimit 200000
ServerLimitの設定値を増やすと、メモリを喰うという話。
増やしておけばいいというわけではない。
prefork デフォルト値
httpd.conf内で、以下のようにコメントアウト。
この状態で、http://servername/server-info で確認。
Server Built: Apr 4 2010 17:19:54
Module Magic Number: 20051115:3
Hostname/port: 192.168.24.121:80
Timeouts: connection: 120 keep-alive: 120
MPM Name: Prefork
MPM Information: Max Daemons: 256 Threaded: no Forked: yes
で確認すると、
StartServers のデフォルトは、「8」ではなく、「5」のようだ。
ServerLimit の値は、簡単には確認できないが、
とした時、
なので、おそらく「256」だろう。
『Apacheポケットリファレンス』によると
『Apacheポケットリファレンス
』WINGSプロジェクト 髙江賢 著 山田祥寛 監修 株式会社技術評論社 2010年5月10日 のp.474には、
MinSpareServers 5
MaxSpareServers 10
MaxRequestsPerChild 10000
となっている。
ドキュメントによると
http://httpd.apache.org/docs/2.2/ja/mod/prefork.html
http://httpd.apache.org/docs/2.0/ja/mod/mpm_common.html
を見てみると、
が、preforkのデフォルト値である。