Article ID: 113007, created on May 27, 2013, last review on May 11, 2014

  • Applies to:
  • Plesk 12.0 for Linux

解決策

Prefork

prefork MPM では、1 スレッドごとに複数の子プロセスを使用します。各プロセスが一度に 1 つの接続を処理します。多くのシステムで、preforkworker と同等のスピードですが、より多くのメモリを消費します。Prefork はスレッドなしのデザインであり、いくつかの状況で worker より優れています。スレッドセーフではないサードパーティモジュールでも使用でき、スレッドのデバッグサポートが不十分なプラットフォームでも容易にデバッグできます。
 
    * Apache 1 で開発
    * 複数の子プロセス、子プロセスごとに 1 つのスレッド、子プロセスがリクエストを処理
    * 優れた隔離性と安定性
    * Parallels Plesk Panel で正しく機能することが検証済み
   
短所
* スレッド MPM と比べメモリ消費量が多く、パフォーマンスが低い
 
Worker

worker MPM は、複数の子プロセスを使用し、それぞれが多数のスレッドを持ちます。各スレッドが一度に 1 つの接続を処理します。Worker は、一般に高トラフィックサーバで良い選択肢となります。prefork MPM と比べ、メモリフットプリントが少ないためです。
 
    * prefork モジュールに追加して Apache 2 で開発
    * 複数プロセス、プロセスごとに多数のスレッド、スレッドがリクエストを処理
    * メモリ消費量が少なく、パフォーマンスが高い
   
短所
* プロセスベースの MPM と比べ、リクエスト間の隔離性が劣る
* 1 つのスレッドが停止するか制御不能になると、プロセス全体が強制終了され、他のすべてのスレッドに影響を与える
* 動的コンテンツの処理にスレッドセーフプロセッサが必要である
* Parallels Plesk Panel でサポートされない
 
それぞれのモジュールは、Apache ウェブサーバの構成ファイルで異なる構成ディレクティブセットを持ちます。

Prefork:
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

 Worker:
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>



情報:

RedHat 系 Linux ディストリビューションでは、Apache ウェブサーバはデフォルトで prefork モジュールで実行されるように構成されています。worker の方が用途に適していると考える場合、技術的には切り替え可能ですが、以下の注意事項を考慮してください。

注意:Parallels Plesk Panel では Apache MPM worker が検証されておらず、Debian/Ubuntu にインストールすると 'psa' パッケージが削除されます。

それでも「worker」モジュールへの切り替えが必要な場合は、/etc/sysconfig/httpd ファイルでこのディレクティブをアンコメントします。
# grep HTTPD= /etc/sysconfig/httpd
#HTTPD=/usr/sbin/httpd.worker
そして、Apache を再起動します。
/etc/init.d/httpd restart

worker MPM では、特別な PHP モジュールを Apache ウェブサーバで構成/ロードすることが前提としています。
# cat /etc/httpd/conf.d/php.conf|grep -A3 "worker.c"
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>



最後に、お客様とエンジニアからの一般的な質問に、サーバを実行している MPM モジュールを確認する方法があります。

まず、ps ユーティリティを使用して、実行中の Apache プロセスのコマンドラインを確認します。
# ps aux | grep -v grep | egrep "apache|httpd"
root      1684  0.0  1.4 284484 14888 ?        Ss   17:52   0:00 /usr/sbin/httpd
apache    3101  0.0  0.7 284484  7596 ?        S    18:02   0:00 /usr/sbin/httpd

次に、次のコマンドを使用して、実行中のモジュールをチェックします。
# /usr/sbin/httpd -l | egrep "prefork|worker"

  あるいは、/etc/sysconfig/httpd 構成ファイルをチェックします。
# grep -B 5 HTTPD= /etc/sysconfig/httpd
# The default processing model (MPM) is the process-based
# "prefork" model. A thread-based model, "worker," is also
# available, but does not work with some modules (such as PHP).
# The service must be stopped before changing this variable.
#
#HTTPD=/usr/sbin/httpd.worker

追加情報

 Apache MPM prefork

Apache MPM worker

 

a914db3fdc7a53ddcfd1b2db8f5a1b9c 29d1e90fd304f01e6420fbe60f66f838 56797cefb1efc9130f7c48a7d1db0f0c 2a5151f57629129e26ff206d171fbb5f e335d9adf7edffca6a8af8039031a4c7

Email subscription for changes to this article