apache で fcgid,fastcgi(PHP-FPM) を使うなら PreforkからWorkerへ切り替えるべし。
   
	
		
	
 
   
  
 
	
apache には、プロセス管理の方法(マルチプロセッシングモジュール (MPM))として プロセス制御(Prefork)、 スレッド制御(Worker) と2つの方法があります。
この2つの違いを単純に言うと
Preforkが、プロセス毎にクライアントからの要求をさばいていくのに対して、
Workerは、スレッド毎にクライアントからの要求をさばいていく
というところ(厳密にはもっと違います)でしょうか。
プロセスよりスレッドの方が、よりリソースを効率的に使用できることは、プログラマーの方なら良くご存じのことだと思います。
ただ、Apacheをインストールするとデフォルトでは、Preforkを使用することになります。
Workerのメリットが大きいにも関わらず、デフォルト動作は、Preforkなんですね。
それは、Workerを使用するときに気を付けることがあるからでもあります。
Workerは先にも書いたようにスレッド管理されます。
つまり、Apacheに関連して使用するモジュールがスレッドセーフでないといけないということになります。
そのため、php + apache のメモリ量をおさえる(2) workerを使ってみる では、phpモジュールを使いたいがために、phpをスレッドセーフで再構築(make)しています。
しかし、PHP-FPMを使う場合、phpモジュール版のようにApacheプロセスの中で動作しない(別プロセス)ですから、
Workerがそのまま利用できることになります。
そこで、以下の記事で解説しているように PHP-FPM を使うなら、ApacheのWorkerを使わない手はないわけです。
今回は、そのApacheのWorkerへPreforkから切りける方法について解説してみます。
 
apache で PreforkからWorkerへ切り替える
ディストリビューションによって異なりますので、それぞれについて解説しておきます。
Debian,
Ubuntu
Debian,Ubuntuでは、Workerのバイナリパッケージがありますので、それをインストールすることで切り替えます。
$ aptitude install apache2-mpm-worker 
以下の新規パッケージがインストールされます:
  apache2-mpm-worker{b}
更新: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
アーカイブ 2,234 B 中 0 B を取得する必要があります。展開後に 69.6 kB のディスク 領域が新たに消費されます。
以下のパッケージには満たされていない依存関係があります:
  apache2-mpm-prefork: 競合: apache2-mpm[仮想パッケージです]
  apache2-mpm-worker: 競合: apache2-mpm[仮想パッケージです]
以下のアクションでこれらの依存関係の問題は解決されます:
     以下のパッケージを削除する:
1)     apache2-mpm-prefork
2)     libapache2-mod-php5
この解決方法を受け入れますか? [Y/n/q/?] Y 
以下の新規パッケージがインストールされます:
  apache2-mpm-worker
以下のパッケージが削除されます:
  apache2-mpm-prefork{a} libapache2-mod-php5{a}
更新: 0 個、新規インストール: 1 個、削除: 2 個、保留: 0 個。
アーカイブ 2,234 B 中 0 B を取得する必要があります。展開後に 8,926 kB のディスク領域が解放されます。
先に進みますか? [Y/n/?] Y 
(データベースを読み込んでいます ... 現在 39823 個のファイルとディレクトリがイン ストールされています。)
libapache2-mod-php5 を削除しています ...
Module php5 already disabled
dpkg: apache2-mpm-prefork: 依存関係に問題があります。しかし要求に従い削除してい ます:
 apache2 は以下に依存 (depends) します: apache2-mpm-worker (= 2.2.16-6+squeeze11) | apache2-mpm-prefork (= 2.2.16-6+squeeze11) | apache2-mpm-event (= 2.2.16-6+squeeze11) | apache2-mpm-itk (= 2.2.16-6+squeeze11) ...しかし:
  パッケージ apache2-mpm-worker はまだインストールされていません。
  パッケージ apache2-mpm-prefork は削除されようとしています。
  パッケージ apache2-mpm-event はまだインストールされていません。
  パッケージ apache2-mpm-itk はまだインストールされていません。
apache2-mpm-prefork を削除しています ...
Stopping web server: apache2 ... waiting .
未選択パッケージ apache2-mpm-worker を選択しています。
(データベースを読み込んでいます ... 現在 39814 個のファイルとディレクトリがイン ストールされています。)
(.../apache2-mpm-worker_2.2.16-6+squeeze11_i386.deb から) apache2-mpm-worker を 展開しています...
apache2-mpm-worker (2.2.16-6+squeeze11) を設定しています ...
Starting web server: apache2.
  | 
 
Debian,Ubuntuでは、prefork版(apache2-mpm-prefork)が削除され、自動的に再起動します。
(上記のようにphpのスレッドセーフでないPHPモジュールもインストールされている場合は、削除されます。)
これだけで、切替完了です。
 
CentOS,
ScientificLinux
CentOS,ScientificLinuxでは、
デフォルトでインストールしたhttpd(apache)にPreforkもWorkerもいずれの機能も同梱されています。
そのため、/etc/sysconfig/httpd の設定を変更するだけです。
...
# コメントアウトされているので、先頭の # を削除すればOKのはずです。無ければ記述してください。
HTTPD=/usr/sbin/httpd.worker
... 
  | 
 
編集を終えたら、httpd(apache)を再起動します。
$ /etc/init.d/httpd restart 
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
  | 
 
これだけで、切替完了です。
 
apache で PreforkからWorkerへ切り替わったか確認する
apache で PreforkからWorkerへ切り替わったか確認するには、以下のようにタイプすれば確認できます。
$ apachectl -V | grep 'Server MPM' 
Server MPM:     Worker
  | 
 
上記のように Worker と出力されれば、ちゃんと設定が切り替わっています。
もし、正しく切り替わっていない場合は、以下のようにPrefork と出力されます。
$ apachectl -V | grep 'Server MPM' 
Server MPM:     Prefork
  | 
 
 
		ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
		このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
		
	
関連記事 : 
  
 	
コメントを投稿 :