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 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
prefork デフォルト値
httpd.conf内で、以下のようにコメントアウト。
<IfModule prefork.c> #StartServers 8 #MinSpareServers 5 #MaxSpareServers 20 #ServerLimit 200000 #MaxClients 50000 #MaxRequestsPerChild 4000 </IfModule>
この状態で、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
# ps auxww|head -1;ps auxww|grep [h]ttpd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 8983 0.0 2.3 27768 10392 ? Ss 21:44 0:00 /usr/sbin/httpd apache 8985 0.0 1.3 27900 5968 ? S 21:44 0:00 /usr/sbin/httpd apache 8986 0.0 1.3 27900 5892 ? S 21:44 0:00 /usr/sbin/httpd apache 8987 0.0 1.3 27900 5892 ? S 21:44 0:00 /usr/sbin/httpd apache 8988 0.0 1.3 27900 5844 ? S 21:44 0:00 /usr/sbin/httpd apache 8989 0.0 1.3 27900 5888 ? S 21:44 0:00 /usr/sbin/httpd
で確認すると、
StartServers のデフォルトは、「8」ではなく、「5」のようだ。
ServerLimit の値は、簡単には確認できないが、
<IfModule prefork.c> #StartServers 8 #MinSpareServers 5 #MaxSpareServers 20 ServerLimit 256 MaxClients 256 #MaxRequestsPerChild 4000 </IfModule>
とした時、
# ps auxww|head -1;ps auxww|grep [h]ttpd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 9195 4.4 2.3 27768 10388 ? Ss 22:07 0:00 /usr/sbin/httpd apache 9197 0.0 1.1 27900 5156 ? S 22:07 0:00 /usr/sbin/httpd apache 9198 0.0 1.1 27900 5156 ? S 22:07 0:00 /usr/sbin/httpd apache 9199 0.0 1.1 27900 5156 ? S 22:07 0:00 /usr/sbin/httpd apache 9200 0.0 1.1 27900 5156 ? S 22:07 0:00 /usr/sbin/httpd apache 9201 0.1 1.1 27900 5156 ? S 22:07 0:00 /usr/sbin/httpd
なので、おそらく「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
を見てみると、
StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 10000
が、preforkのデフォルト値である。
ServerLimit設定値とメモリ
preforkでの比較。Apacheへのアクセスはない状態。
ServerLimit 100000
ServerLimit 200000
ServerLimitの設定値を増やすと、メモリを喰うという話。
増やしておけばいいというわけではない。