6月 182011
 
シェアする

02. 上限プロセス数の話と変更方法

ServersMan@VPS上で実行出来るプロセス数はプラン毎に制限されており、Entryが「120Standardが「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>

これを見ると、待ち受けのプロセスはで起動し、アクセスが多いときには最高プロセスを予備プロセスとして起動ができる。この予備プロセスは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 -p swtune.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 子プロセス
daemon   58687  0.0  0.2  11564  2352 ?        S    22:50   0:00 /usr/sbin/httpd 子プロセス
daemon   58688  0.0  0.2  11564  2352 ?        S    22:50   0:00 /usr/sbin/httpd 子プロセス
daemon   58690  0.0  0.2  11564  2352 ?        S    22:50   0:00 /usr/sbin/httpd 子プロセス
daemon   58691  0.0  0.2  11564  2352 ?        S    22:50   0:00 /usr/sbin/httpd 子プロセス
[root@vps3 conf.d]#

正しく起動(StartServers)はプロセスとなりました。

なお、変更した/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)」です。


このエントリーをはてなブックマークに追加

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ

%d人のブロガーが「いいね」をつけました。