02. 上限プロセス数の話と変更方法
ServersMan@VPS上で実行出来るプロセス数はプラン毎に制限されており、Entryが「120」、Standardが「240」です。Proは契約したことないので憶測ですが「360」だと思います。この制限値は/proc/user_beancountersの「numproc」で確認できます。
Entry [root@vps3 ~]# cat /proc/user_beancounters | grep numproc numproc 37 45 120 120 0 [root@vps3 ~]#
Standard [root@trippyboy ~]# cat /proc/user_beancounters | grep numproc numproc 46 80 240 240 0 [root@trippyboy ~]#
サーバ単位でのプロセス上限数の他に、ApacheにはApacheが起動するプロセス数を制限する設定があります。初期状態では、/etc/httpd/conf.d/swtune.confというファイルで制限が行われており、この制限が「ServersMan@VPSは使えない」という発言を生んでいる要因の一つだと思います。この設定ファイルで設定されている内容は以下の通りです。
## ## Server-Pool Size Regulation (MPM specific) ## # prefork MPM # StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # ServerLimit: maximum value for MaxClients for the lifetime of the server # MaxClients: maximum number of server processes allowed to start # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule prefork.c> StartServers 1 MinSpareServers 1 MaxSpareServers 5 ServerLimit 10 MaxClients 10 MaxRequestsPerChild 4000 </IfModule> # worker MPM # StartServers: initial number of server processes to start # MaxClients: maximum number of simultaneous client connections # MinSpareThreads: minimum number of worker threads which are kept spare # MaxSpareThreads: maximum number of worker threads which are kept spare # ThreadsPerChild: constant number of worker threads in each server process # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule worker.c> StartServers 1 MaxClients 10 MinSpareThreads 1 MaxSpareThreads 4 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
さて、上記のうち気にすべきは「#」でコメントアウトがされていない部分となります。
<IfModule prefork.c> StartServers 1 MinSpareServers 1 MaxSpareServers 5 ServerLimit 10 MaxClients 10 MaxRequestsPerChild 4000 </IfModule>
と
<IfModule worker.c> StartServers 1 MaxClients 10 MinSpareThreads 1 MaxSpareThreads 4 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
です。
ここでは「<IfModule~>」と「</IfModule>」で囲われており、”もし指定のモジュールがロードされていたら”という条件を設定しております。ServersMan@VPSで起動しているApacheはproforkモジュールを使用していますので「<IfModule prefork.c> ~ </IfModule>」までの内容が反映されます。
[root@vps3 ~]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
[root@vps3 ~]#
その設定内容がどのような意味を持っているか簡単に説明します。
<IfModule prefork.c>
StartServers 1 サーバ起動時のプロセス数
MinSpareServers 1 予備のプロセスとして起動するプロセス数
MaxSpareServers 5 予備のプロセスとして起動する上限プロセス数
ServerLimit 10 設定可能な上限プロセス数
MaxClients 10 上限プロセス数
MaxRequestsPerChild 4000 各子プロセスが処理出来るリクエスト数
</IfModule>
これを見ると、待ち受けのプロセスは1つで起動し、アクセスが多いときには最高5プロセスを予備プロセスとして起動ができる。この予備プロセスはApacheが勝手に判断して起動し、上限数の5を越えたものが停止されるしくみです。ServerLimitで設定されている値が指定可能な上限数で、現在はMaxClientsにて最高10プロセスが起動出来る様に設定されています。
Entryプランで最高120プロセスが利用出来るのに、Apacheに10プロセスしか利用しない初期設定によりWebレスポンスが悪いという状態が発生しかねません。
この設定を変更しましょう。
/etc/httpd/conf.d/の下にある「.conf」で終わるファイルは設定ファイルとして読み込まれますので、バックアップをとるときには、「.conf」で終わらないファイル名で作成してください。
バックアップを取る
[root@vps3 ~]# cd /etc/httpd/conf.d ←設定ファイルのディレクトリに移動 [root@vps3 conf.d]# cp -pswtune.conf swtune.conf.ORG ←オリジナルをコピー [root@vps3 conf.d]# ls -al total 52 drwxr-xr-x 2 root root 4096 Jun 18 22:42 . drwxr-xr-x 4 root root 4096 Dec 13 2010 .. -rw-r--r-- 1 root root 219 Dec 30 03:15 proxy_ajaxterm.conf -rw-r--r-- 1 root root 566 Aug 31 2010 proxy_ajp.conf -rw-r--r-- 1 root root 392 Aug 31 2010 README -rw-r--r-- 1 root root 154 Apr 26 2010 sm.conf -rw-r--r-- 1 root root 9677 Aug 31 2010 ssl.conf -rw-r--r-- 1 root root 1246 Jul 15 2007 swtune.conf -rw-r--r-- 1 root root 1246 Jul 15 2007 swtune.conf.ORG ←コピーしたファイル -rw-r--r-- 1 root root 299 Aug 31 2010 welcome.conf [root@vps3 conf.d]#
後はswtune.confを変更してください。
例:
<IfModule prefork.c> StartServers 5 サーバ起動時のプロセス数 MinSpareServers 3 予備のプロセスとして起動するプロセス数 MaxSpareServers 5 予備のプロセスとして起動する上限プロセス数 ServerLimit 80 設定可能な上限プロセス数 MaxClients 80 上限プロセス数 MaxRequestsPerChild 4000 各子プロセスが処理出来るリクエスト数 </IfModule>
変更後設定を有効にするにはApacheのリロード(service httpd reload)または再起動(service httpd restart)が必要です。この設定を行うとpsコマンドで確認できるApacheプロセスが変化しますのでお試し下さい。
変更後:
[root@vps3 conf.d]# service httpd restart ←Apache再起動 Stopping httpd: [ OK ] Starting httpd: [ OK ] [root@vps3 conf.d]# [root@vps3 conf.d]# ps auxww | grep http | grep -v grep ←プロセス数確認 root 58684 2.4 0.5 11428 4068 ? Ss 22:50 0:00 /usr/sbin/httpd 親プロセス daemon 58686 0.0 0.2 11564 2352 ? S 22:50 0:00 /usr/sbin/httpd 子プロセス1 daemon 58687 0.0 0.2 11564 2352 ? S 22:50 0:00 /usr/sbin/httpd 子プロセス2 daemon 58688 0.0 0.2 11564 2352 ? S 22:50 0:00 /usr/sbin/httpd 子プロセス3 daemon 58690 0.0 0.2 11564 2352 ? S 22:50 0:00 /usr/sbin/httpd 子プロセス4 daemon 58691 0.0 0.2 11564 2352 ? S 22:50 0:00 /usr/sbin/httpd 子プロセス5 [root@vps3 conf.d]#
正しく起動(StartServers)は5プロセスとなりました。
なお、変更した/etc/httpd/conf.d/swtune.confでのプロセス数ですが、本来であれば/etc/httpd/conf/httpd.confで設定されます。今回は、Includeされている/etc/httpd/conf.d/*.confのファイルをそのまま変更していますが、1/etc/httpd/conf.d/swtune.confの削除、2/etc//httpd/conf/httpd.confの編集 でも実現可能な内容ですのでぜひ覚えておいてください。
ここまででプロセス数のお話は終了です。
次は、「03. AllowOverrideの話と変更方法(.htaccess)」です。
コメント