web-dev-qa-db-ja.com

Apache2に複数のプロセスがあるのはなぜですか?

これはコマンドps -A |grep -i Apache2出力:

xxxx@debian:~$ ps -A |grep -i Apache2
 2362 ?        00:00:01 Apache2
 2365 ?        00:00:00 Apache2
 2367 ?        00:00:00 Apache2
 2369 ?        00:00:00 Apache2

killcommandを使用する場合、正しいpidはどれですか?

3
Liu Hao

それがApacheの仕組みであるためです。Apacheはルートとして起動され、通常のユーザーとして起動される「子供」を生成します。ユーザーのApache2がシステムを破壊できないようにする必要があるため、セキュリティは賢明なアプローチです。

マニュアルから:

単一の制御プロセスは、接続をリッスンし、それらが到着したときにそれらを提供する子プロセスの起動を担当します。 Apache httpdは、常にいくつかの予備またはアイドルのサーバープロセスを維持しようとします。これらのプロセスは、着信要求を処理する準備ができています。このようにして、クライアントは、リクエストが処理される前に、新しい子プロセスが分岐されるのを待つ必要がありません。

StartServers、MinSpareServers、MaxSpareServers、およびMaxRequestWorkersは、要求を処理するために親プロセスが子を作成する方法を規制します。一般に、Apache httpdは非常に自己調整型であるため、ほとんどのサイトではこれらのディレクティブをデフォルト値から調整する必要はありません。 256を超える同時要求を処理する必要があるサイトでは、MaxRequestWorkersを増やす必要がありますが、メモリが限られているサイトでは、サーバーがスラッシング(メモリをディスクに交換する)を防ぐためにMaxRequestWorkersを減らす必要があります。チューニングプロセス作成の詳細については、パフォーマンスヒントのドキュメントを参照してください。

これに関して:

Killコマンドを使用する場合、正しいpidはどれですか?

Apacheリクエストを強制終了する必要はありません。 Apacheに関連するものを殺さないために、Sudo service Apache restartを使用することをお勧めします。サービスの正常な再起動は、強制終了よりも常に選択する必要があります。

5
Rinzwind

Apacheは、Apacheが複数の要求に迅速に応答できるいくつかの子プロセスを自動的に開始します。そのため、デーモンは新しい要求ごとに別の新しいプロセスをフォークする必要がありません。

このような子プロセスには、Apache構成内のいくつかのディレクティブによって構成されたライフサイクルがあります。

次のようにpsを呼び出すと、プロセスの階層を確認できます。

root@Host:~$ ps faux | grep Apache
root      3122  0.0  0.5  37164 11172 ?        Ss   Aug09   1:55 /usr/sbin/Apache2 -k start
www-data 21970  0.0  0.8  43636 17060 ?        S    Nov03   0:41  \_ /usr/sbin/Apache2 -k start
www-data 27484  0.0  0.8  43372 16660 ?        S    10:41   0:04  \_ /usr/sbin/Apache2 -k start
www-data 29631  0.0  0.7  43132 16360 ?        S    13:36   0:02  \_ /usr/sbin/Apache2 -k start
www-data 29632  0.0  0.5  37644 10888 ?        S    13:36   0:03  \_ /usr/sbin/Apache2 -k start
www-data 29696  0.0  0.8  43380 16644 ?        S    13:42   0:02  \_ /usr/sbin/Apache2 -k start
www-data 30025  0.0  0.7  42584 15864 ?        S    14:10   0:02  \_ /usr/sbin/Apache2 -k start
www-data 30026  0.0  0.8  43968 17216 ?        S    14:10   0:02  \_ /usr/sbin/Apache2 -k start
www-data 30092  0.0  0.7  43348 16556 ?        S    14:13   0:01  \_ /usr/sbin/Apache2 -k start
www-data 30184  0.0  0.8  43636 16884 ?        S    14:18   0:01  \_ /usr/sbin/Apache2 -k start
www-data 30235  0.0  0.7  42576 15836 ?        S    14:23   0:01  \_ /usr/sbin/Apache2 -k start

したがって、親プロセスを「強制終了」するだけです。しかし、今日の最新のLinuxディストリビューションでは、より生態学的な方法でデーモンを停止しています。すべての子プロセスでApacheデーモンを停止するには:

Sudo service Apache stop
4
chaos