120

Apache構成ファイルを見ると、PreforkとWorkerMPMが定義されていることがわかります。違いは何ですか?Apacheはどちらを使用していますか?

4

7 に答える 7

122

Preforkとworkerは、MPMapacheが提供する2つのタイプです。どちらにも長所と短所があります。

デフォルトでは、mpmはスレッドセーフなプリフォークです。

Prefork MPMは、それぞれ1つのスレッドを持つ複数の子プロセスを使用し、各プロセスは一度に1つの接続を処理します。

ワーカーMPMは、それぞれ多くのスレッドを持つ複数の子プロセスを使用します。各スレッドは、一度に1つの接続を処理します。

詳細については、https://httpd.apache.org/docs/2.4/mpm.htmlおよびhttps://httpd.apache.org/docs/2.4/mod/prefork.htmlにアクセスしてください。

于 2012-12-20T08:38:46.730 に答える
22

Apacheのマルチプロセッシングモジュール(MPM)は、マシンのネットワークポートへのバインド、要求の受け入れ、および要求を処理するための子のディスパッチを担当します(http://httpd.apache.org/docs/2.2/mpm.html)。

これらは他のApacheモジュールと同じですが、常に1つだけのMPMをサーバーにロードする必要がある点が異なります。MPMは構成中に選択され、configureスクリプトで引数を使用してサーバーにコンパイルされます。ここで、は目的のMPMの名前です。--with-mpm=NAMENAME

Apacheは、コンパイル時に別のMPMが選択されない限り、オペレーティングシステムごとにデフォルトのMPMを使用します(たとえば、Windowsではmpm_winntデフォルトで使用されます)。オペレーティングシステムとそのデフォルトのMPMのリストは次のとおりです。

サーバーにコンパイルされているモジュールを確認するには、コマンドラインオプションを使用します-lここにドキュメントがあります)。たとえば、Windowsのインストールでは、次のようになります。

> httpd -l
Compiled in modules:
  core.c
  mod_win32.c
  mpm_winnt.c
  http_core.c
  mod_so.c

バージョン2.2の時点で、これは利用可能なコア機能とMPMモジュールのリストです

  • core-常に利用可能なコアApacheHTTPサーバー機能
  • mpm_common-複数のマルチプロセッシングモジュール(MPM)によって実装されるディレクティブのコレクション
  • beos-このマルチプロセッシングモジュールはBeOS用に最適化されています。
  • event-標準ワーカーMPMの実験的なバリアント
  • mpm_netwareNovellNetWare用に最適化された専用スレッドWebサーバーを実装するマルチプロセッシングモジュール
  • mpmt_os2OS / 2用のハイブリッドマルチプロセス、マルチスレッドMPM
  • preforkスレッド化されていない、フォーク前のWebサーバーを実装します
  • mpm_winnt-このマルチプロセッシングモジュールは、WindowsNT用に最適化されています。
  • worker-ハイブリッドマルチスレッドマルチプロセスWebサーバーを実装するマルチプロセッシングモジュール

さて、との違いpreforkworker

MPM _prefork

Apache 1.3と同様の方法でリクエストを処理する、スレッド化されていないプリフォークWebサーバーを実装します。スレッドセーフでないライブラリとの互換性のためにスレッド化を回避する必要があるサイトに適しています。また、各リクエストを分離するのに最適なMPMであるため、単一のリクエストに関する問題が他のリクエストに影響を与えることはありません。

workerMPMは、ハイブリッドマルチプロセスマルチスレッドサーバーを実装し、パフォーマンスを向上させるため、スレッドセーフでないライブラリを含む他のモジュールを使用している場合を除いて、MPMを使用することをお勧めします(Serverfaultに関するこの説明またはこれも参照しください

于 2015-06-15T08:14:50.487 に答える
9

詳細については、これをご覧ください。これは、Apacheが複数の要求を処理する方法を指します。デフォルトであるプリフォークは、いくつかのApacheプロセスを開始します(ここではデフォルトで2つですが、httpd.confを介してこれを構成できると思います)。ワーカーMPMは、リクエストごとに新しいスレッドを開始します。これは、メモリ効率が高いと思います。歴史的に、Apacheはpreforkを使用していたため、より適切にテストされたモデルです。スレッド化は2.0でのみ追加されました。

于 2012-12-14T18:29:37.073 に答える
6

CentOS 6.xおよび7.x(Amazon Linuxを含む)の場合、以下を使用します。

sudo httpd -V

これにより、どのMPMが構成されているかがわかります。プレフォーク、ワーカー、またはイベントのいずれか。Preforkは、以前のスレッドセーフモデルです。ワーカーはマルチスレッドであり、イベントはphp-mpmをサポートします。これは、スレッドとリクエストを処理するためのより優れたシステムであると考えられています。

ただし、構成によって結果が異なる場合があります。php-mpmには多くの不安定性が見られますが、速度の向上は見られません。攻撃的なスパイダーは、php-mpmの最大の子プロセスを非常に簡単に使い果たす可能性があります。

prefork、worker、またはeventの設定は、sudo nano /etc/httpd/conf.modules.d/00-mpm.conf(CentOS 6.x / 7.x / Apache 2.4の場合)で設定されます。

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#LoadModule mpm_event_module modules/mod_mpm_event.so
于 2016-11-24T06:16:02.920 に答える
3

次のコマンドを発行することで、Apacheがプリフォームとワーカーのどちらを使用しているかを確認できます。

apache2ctl -l

結果の出力で、prefork.cまたはworker.cの言及を探します

于 2014-06-05T04:59:13.057 に答える
2

RHEL7上のApache2.4でpreforkまたはworkermpmを簡単に切り替えることができます

を実行してMPMタイプを確認します

sudo httpd -V

Server version: Apache/2.4.6 (Red Hat Enterprise Linux)
Server built:   Jul 26 2017 04:45:44
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

次に、MPMを変更して、次のファイルを編集し、必要なMPMのコメントを解除します。

 /etc/httpd/conf.modules.d/00-mpm.conf 

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so
于 2018-03-09T13:46:38.187 に答える
1

Apacheには、次の2種類のMPM(マルチプロセッシングモジュール)が定義されています。

1:プレフォーク2:労働者

デフォルトでは、Apackeはプリフォークモード、つまりスレッド化されていないプリフォークWebサーバーで構成されています。つまり、各Apache子プロセスには単一のスレッドが含まれ、一度に1つの要求を処理します。そのため、より多くのリソースを消費します。

Apacheには、ApacheをマルチプロセスのマルチスレッドWebサーバーに変えるワーカーMPMもあります。ワーカーMPMは、それぞれ多くのスレッドを持つ複数の子プロセスを使用します。

于 2020-05-14T19:28:44.320 に答える