Apacheプロセスはどのくらい存続しますか?


9

Apacheがmod-phpのプロセスをフォークするとき、それはどのくらいの期間存続しますか?プロセスは応答が送信されるとすぐに終了しますか、それともブラウザが完全な応答を受信するまで存続しますか?

回答:


9

mod-phpを使用している場合は、preforkMPM を使用している可能性があります。これは、リクエストを処理するために子プロセスを生成します。メインapache2.conf(またはhttpd.confディストリビューションによって異なります)ファイルのディレクティブによって管理されるこれらの子の数と寿命。

次のような部分を探します(値は異なる場合があります)。

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

ApacheはStartServers自動的に子を生成します。これらのプロセスは、リクエストが届くまでアイドル状態になります。子プロセスがビジーになるとMaxClients、ロードを処理するために子プロセスまで生成され、MinSpareServersアイドル状態の子を維持して新しいリクエストを取得しようとします。物事が落ち着くと、カウントがになるまで、アイドル状態の子供は殺されMaxSpareServersます。

あなたが尋ねているビットはによって処理されMaxRequestsPerChildます。0に設定すると、子供は永遠に生きることができます。これは、ほとんどのApacheインストールのデフォルト値です。それ以外の値に設定すると、その数の要求を処理すると、現在の負荷に関係なく、各子プロセスが強制的に強制終了され、再起動されます。

ここのprefork MPMの詳細:http : //httpd.apache.org/docs/2.2/mod/prefork.html


おかげで、Apacheの理解が深まりました。私の具体的な質問は次のとおりです。応答がクライアントに返送されると、子プロセスは何をしますか?クライアントが確認するのを待ってアイドル状態のままですか、それとも新しいリクエストをすぐに処理できますか?
ジェイミークリントン

応答が送信されてクライアントがそれを確認すると、TCP接続はデフォルトでさらに(おそらく)15秒間開いたままになります。その間、子は最初に同じクライアントから追加のHTTPリクエストを受信します。何も受信されない場合、TCP接続は閉じられ、子は上記のルールに従って処理されます。通常、それは生きたままでアイドル状態のプールに戻ります。この動作は、クライアントとサーバーの両方で変更できます。(たとえば、すぐに接続を閉じることが望ましい場合があります)
SmallClanger

また、まだ使用していない場合、wireshark.orgはクライアントとサーバー間のトラフィックを分析するための優れたツールです。これにより、内部で何が起こっているかについての大きな洞察が得られます。
SmallClanger、2011年

4

httpdはmod_phpのプロセスをフォークしません。mod_phpが埋め込まれたプロセス自体をforkします。子は、MaxRequestsPerChild要求が満たされるまで生き続けます。mod_php自体は、スクリプトが終了するか制限時間を超えるまで、PHPスクリプトの各リクエストを処理し続けます。

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