web-dev-qa-db-ja.com

HTTPDプロセスの生成

Apacheがどのように新しい子を生成するかを確認できますか?

Webサーバー(HTTP 1.0 /キープアライブなし)に接続してHTTP/GETを発行した場合と同様に、新しいHTTPD子が生成されます。次に別のHTTP/GETを発行すると、新しいTCP接続が構築されます。ただし、同じ子プロセスを使用して、新しいプロセスを生成しますか?

また、HTTP 1.1(キープアライブ付き)を使用していて、同じTCP接続を再利用した場合、httpdプロセス/スポーンはキープアライブを使用していなかった場合とは異なりますか?

ありがとう、

1
RickD

webサーバー(HTTP 1.0 /キープアライブなし)に接続してHTTP/GETを発行すると、新しいHTTPDの子が生成されます

いいえ、TCPハンドシェイクを完了するには、リクエストを処理するプロセスがすでにあります。「プロセス」と言及しているので、これはプレフォークMPMについて話していることを意味します。この場合、サーバーにはすでに使用可能な子プロセスのプールがあるはずです。これらの1つは、次の着信接続を取得するためにミューテックスを取得します。

スレッドベースのサーバーも同様に機能します。

イベントベースのサーバーは完全に異なる魚のやかんであり、スレッド/プロセスを生成しません。

その後、別のHTTP/GETを発行します...同じ子プロセスを使用しますか

いいえ。キープアライブ接続があることがわかっている場合でも、サーバーによって保持される状態はありません。したがって、新しいプロセスであるかのように扱う必要があります。

2
symcbean

これはhttpサーバーのパフォーマンスの最も重要な側面であるため、普遍的な設定はありません。一般に、Apacheはフォーク(またはあなたがそれを呼んでいるようにスポーン)を回避する回避しようとします。これをチェックしてください:

http://www.stepwise.hk/blog/check-if-Apache-running-prefork-or-worker/

マルチプロセッシングモジュール(MPM)は、ネットワーク接続を管理し、要求をディスパッチするApacheモジュールです。 Apache2で使用できる一般的なMPMには、mpm_prefork_moduleとmpm_worker_moduleの2つがあります。 mpm_prefork_moduleは、リクエストごとに1つのプロセスという従来のモデルを使用しますが、mpm_worker_moduleは、複数のプロセスを使用するスレッドモデルを使用します。各プロセスには複数のスレッドがあり、オーバーヘッドを抑えてパフォーマンスを向上させます。

Apache2.4のマニュアルには次のように書かれています。

Apacheをビルドするときは、使用するMPMを選択する必要があります。一部のプラットフォームには、プラットフォーム固有のMPMがあります:mpm_netware、mpmt_os2、および mpm_winnt [すべてのMSWindowsバージョンの場合]。一般的なUnixタイプのシステムの場合、選択できるMPMがいくつかあります。 MPMの選択は、httpdの速度とスケーラビリティに影響を与える可能性があります。

  • worker MPMは、それぞれ多くのスレッドを持つ複数の子プロセスを使用します。各スレッドは、一度に1つの接続を処理します。ワーカーは、プリフォークMPMよりもメモリフットプリントが小さいため、一般的にトラフィックの多いサーバーに適しています。
  • event MPMはWorkerMPMと同様にスレッド化されますが、一部の処理作業をサポートスレッドに渡し、メインスレッドを解放して新しい要求を処理できるようにすることで、より多くの要求を同時に処理できるように設計されています。
  • prefork MPMは、それぞれ1つのスレッドを持つ複数の子プロセスを使用します。各プロセスは、一度に1つの接続を処理します。
1
kubanczyk