Apacheがプリフォークまたはワーカーとして実行されているかどうかを確認するにはどうすればよいですか?


40

apacheがpreforkまたはworkerとして実行されている(または実行するように構成されている)ことを確認するにはどうすればよいですか?


2
またはより技術的に「実行するようにコンパイル」

回答:


37

MPMはコンパイル時に構成されます。後でそれを把握する1つの方法は、コンパイルされたモジュールをリストすることです。そのリストには、選択したMPMが含まれます。リストは、-lフラグを使用してapacheバイナリを実行することで実行できます。

andreas@halleck:~$ apache2 -l
Compiled in modules:
 core.c
 mod_log_config.c
 mod_logio.c
 worker.c
 http_core.c
 mod_so.c
andreas@halleck:~$ 

ここで、worker.cモジュールを見つけたため、ワーカーMPMを実行しています。


4
この答えは間違っています。私の答えをご覧ください。
クリスジョンソン14

1
うーん、Ubuntuではこれを行うとワーカーも
プリフォーク

2
Ubuntuでは、apache2ctl -Mアクティブなモジュールを一覧表示するために使用できます。
-SteffenNielsen

53

Series8217とAndolの回答はどちらも間違っています。

問題は、Apacheがpreforkまたはworkerを実行しているかどうかを確認する方法でした。他の回答によって与えられたアドバイスは、デフォルトの MPMが何であるか(コンパイルされたモジュールに基づいて)を伝えるだけであり、現時点でそのデフォルトまたは別の選択肢が使用されている場合ではありません。

httpd -Vpreforkが表示される場合、preforkがコンパイル済みのデフォルトMPMであることを意味します。このプロセスに示されているように、Apache構成ファイルの設定を変更することでオーバーライドできます。

  1. 構成ファイルを編集します(/etc/sysconfig/httpdCentOS / RedHatなど)
  2. この行を追加またはコメント解除します。 HTTPD=/usr/sbin/httpd.worker
  3. Apacheを再起動します

実際に実行されているMPMは、このプロセスを使用して表示できます。

  1. Apache mod_infoを有効にする
  2. mod_info URLを照会します。通常は curl localhost/server-info
  3. [サーバー設定]セクションに[MPM名:ワーカー]と表示されます
  4. httpd -Vもう一度実行します-ワーカーではなくプリフォークが表示されます

結論:

  • httpd -V どのオプションが実際に使用されているかではなく、デフォルトのオプションを表示します

httpd -VApacheがpreforkまたはworkerを実行しているかどうかを判断するために使用するという多くの多くのWebサイトに回答があります。彼らはすべて間違っています。上記の手順を試して、自分で確認してください。


参考までに、httpd.apache.org / docs / trunk / mpm.htmlによると、MPMはすべてのプラットフォームで静的モジュールにすることも、DSO(Unixで)として構築することもできます。静的モジュールとして構築される場合、「MPMを変更するにはサーバーを再構築する必要があります。」サーバーを再構築する場合を除き、静的モジュールMPMを変更できないというApacheドキュメントは間違っていますか?
スティーブンT.スナイダー14

これは、特定のディストリビューション固有のものと非常によく似ていますが、より高いレベルのラッパーがありますか?
アンドル14年

2
CentOS 6.6では、/ usr / sbin / httpd、/ usr / sbin / httpd.eventおよび/usr/sbin/httpd.workerはすべて、コンパイル時に異なるMPMが構成された個別のバイナリです(それぞれ、プリフォーク、イベント、およびワーカー)。/ etc / sysconfig / httpdのHTTPDの設定を変更すると、initスクリプトによって実行されるバイナリが制御されます。
ポールハルデーン14年

Ubuntu 16.04 LTSでhttpd -Vの代わりにapache2 -Vを実行する必要がありました
-cnizzardini

41

Ubuntu 14.04で

a2query -M

指示しますeventpreforkworker

mpm_<chosen>from mods-availableからmods-enabledinのシンボリックリンクを追加することで変更できます/etc/apache2

一度に1つだけ許可されます。


2
これは受け入れられた答えである必要があります。

はい、素晴らしい答えです!シンプルで必要なものを返す
フラッシュサンダー

(それのようなルックスは、Apache 2.2上で作業をしません....のApache 2.4で働いていた)最高のおかげで私のために働いた
dmikam

eventMPMは、Apacheのサイトによると、「唯一のアクティブな処理との接続のためのスレッドを消費することを目標に、労働者のMPMの変異体」です。
ジョナサンバーガー

7

RedHatおよび派生物では、起動するtopps aux、httpdプロセス名を確認します。

  • httpd Apacheがプリフォークとして実行されていることを意味します
  • httpd.worker ワーカーとして実行されていることを意味します

4

RHEL / Fedora / etcで、を実行しhttpd -Vます。次のような出力が得られます。

Server version: Apache/2.2.21 (Unix)
     ...
Architecture:   64-bit
Server MPM:     Prefork
     ...

ここで「Server MPM」は「Prefork」なので、私のサーバーはprefork MPMを実行しています。


この答えは間違っています。私の答えをご覧ください。
クリスジョンソン14

@ChrisJohnson、興味深い発見...私の理解では、MPMは構成によってのみ変更でき、コンパイルによってのみ変更できるということでした。OPは、「またはより厳密には「実行するようにコンパイルされた」」という質問にコメントしたため、OPは同じように考えたようです。私はあなたの答えを再現することを検討し、それを確認したら私は私のものを取り消すでしょう。
スティーブンT.スナイダー14

httpd.apache.org/docs/trunk/mpm.htmlのapacheドキュメントを介して、MPMをDSOモジュールとして構築し、「Unixおよび類似のプラットフォーム」でLoadModuleディレクティブを使用して動的にロードできることを確認しました。そのため、MPMは特定の状況下でロード時に実際に変更できます(最近では最も一般的な構成になる可能性があります。)
スティーブンT.スナイダー14

4

クリス・ジョンソンは正しい。httpd.confに移動して、次の行を追加します。

<Location /server-info>
SetHandler server-info
</Location>

Apacheを再起動します:/etc/init.d/httpd restart。次に、ブラウザでlocalhost / server-infoにアクセスし、MPM Nameセクションを確認します。


さらに良いのは、<IfModule info_module> </ IfModule>
-Lexib0y

3

使用中のMPMを判別する際に信頼できるはずの別の方法を次に示します。に次を追加しますhttpd.conf

<IfModule prefork.c>
    Header append X-MPM prefork
</IfModule>
<IfModule worker.c>
    Header append X-MPM worker
</IfModule>

次に、を使用してヘッダーを確認しcurl -I localhost | grep X-MPMます。


3

centos(またはrhel)では、次のコマンドを実行できます。

ps -ef | grep httpd

あなたが見るならば/usr/sbin/httpd.worker実行されている、それは労働者のMPMを使用しています。あなたが表示された場合は/usr/sbin/httpd実行されている、それはpreforkのを使用しています


2

クリス・ジョンソンの答えは正しいです。

Apacheドキュメント(http://httpd.apache.org/docs/2.2/mod/mod_info.html)に記載されているように、infoモジュールを有効にした後、この1つのライナーにより、使用しているMPMが提供されます。

links -dump http://localhost/server-info/?server | grep "MPM Name"

2

Debianでディストリビューションのように理解する1つの方法は、次を実行することです。

apachectl -V | grep -i mpm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.