web-dev-qa-db-ja.com

Apacheはworkerおよびpreforkmpmモジュールを使用して接続とリクエストをどのように処理しますか?

Apacheのpreforkモジュールが、接続を処理するために1つのマスタープロセスと複数の子プロセスを作成することを知っています。私の質問は次のとおりです。

各プリフォークの子は、1回に1つ接続を処理しますか、それとも1つ要求を処理しますか?また、1つの接続を処理する場合、新しい接続はそれぞれ、アイドル状態の子プロセスの1つによって処理されるためにキューで待機する必要があることを意味しますか?そして、それはキープアライブ接続について何を言いますか?

また、スレッドを使用するワーカーmpmモジュールについても同じ質問がありますか?

3
Hussein Galal

各プリフォークの子は、1回に1つの接続を処理しますか、それとも1つの要求を処理しますか?

各子/スレッドは1つの接続(TCP接続)を処理します。

接続が閉じられると、子プロセスは別の接続を待ちます。 1つの接続で、0、1、またはそれ以上のリクエスト(HTTPリクエスト)を送信できます。

クライアントがリクエストを送信しない場合、構成によっては、ログでHTTP408がタイムアウトする可能性があります。

KeepAlive を有効にすると、最初のリクエストが処理されると接続が閉じられないため、接続ごとに複数のHTTPリクエストを設定できます。

キープアライブがない場合、1つのリクエストで1つの接続があります。そのため、問題が発生する可能性があります。

新しい接続はそれぞれ、アイドル状態の子プロセスの1つによって処理されるために、キューで待機する必要がありますか?

はい、そういうわけで、いくつかのアイドル状態のサーバー/スレッドを持つようにApacheを構成するので、新しい接続は新しい子プロセス/スレッドが作成されるのを待つ必要はありません。十分な子プロセスがない場合は、必要に応じて、構成の制限に従って新しいプロセスが作成されます。

これまでのところ、プロセスについての私自身の理解のために。

2
Zimmi