web-dev-qa-db-ja.com

インストールするもの:Apache WorkerまたはPrefork? (それぞれの短所は何ですか?

PreforkWorker MPMの両方の説明に基づいて、preforkタイプはやや古くなっているようですが、2つのタイプの適切な比較を実際に見つけることができません。

知りたいこと:

  • 2つのバージョンの違いは何ですか?
  • 各サーバータイプの(欠点)利点は何ですか?
  • 条件に基づいて選択するタイプに関する基本的なガイドラインはありますか?
  • 2つの間に大きなパフォーマンスの違いはありますか?
55
Aron Rotteveel

ドキュメントが言うように、スレッドセーフでないライブラリとの互換性のためにスレッド化を回避する必要がある場合は、prefork MPMを使用する必要があります。通常、重要なApacheモジュール(mod_php-またはより正確には、リンク先の無数の拡張機能とライブラリ-正規の例です)には、ある種の非スレッドセーフライブラリがあります(またはその中に非スレッドセーフコードがあります)。かなり標準的なApacheインストールを使用しているのでない限り、私はprefork MPMを選びます。

40
womble

多数(> 100)の同時接続を処理しながら安全でない拡張機能を実行する従来のソリューションは、fastCGI(ネイティブのApacheモジュールであるmod_fcgid)でPHP)を実行し、Apacheから動的リクエストをプロキシすることです。ワーカーMPMを実行するインスタンス。

これにより、静的コンテンツと動的コンテンツの両方を処理するときに、適度な量のメモリ(4〜8GB)で数百から1000を超える同時接続を拡張できます。

もちろん、全体的な展開(memcached、ニス)の一部として、フロントエンドキャッシングソリューションも調査する必要があります。

または、Apache 2.4とそのネイティブevent MPMにアップグレードします。これにより、並行性が大幅に改善されます(接続時にスレッドがポーリングされ、ポーリングを待機しません)。

13
adaptr

質問が投稿されてから約3年になりますが、より良いパフォーマンスを得るには、PHPを使用している場合でも、事前フォークではなくワーカーMPMを使用することをお勧めします。

違いについては、プリフォークはスレッド化されていないため、サーバーはクライアント要求ごとにプロセスをフォークします(新しいリクエストを見越して事前フォークするため、フォークが応答時間に影響を与えません)。リクエストは別のプロセスのサーバーであるため、通常、これはメモリとCPUに多くの負荷をかけます。ワーカーは、軽量でメモリ使用率が高いマルチスレッドを実現します。

6
aleemb

これはあなたが提供しているものに非常に特有のものです。小さな静的接続をたくさん実行している場合、スレッドは軽くて高速になります。絶えず生成されるいくつかの大きなアプリがあるだけの場合、成熟度と安定性が原因で、preforkにEdgeが含まれる可能性があります。必要なものをセットアップしてテストし、MPMモジュールを交換して、もう一度試してみて、どちらがより適しているかを確認してみませんか?

2
Marcin

それはあなたが持つトラフィックの種類と種類に必要です。また、最初に、プリフォークとワーカーの主な違いを理解する必要があります。以下の記事があなたが理解するのに役立つことを願っています! http://slashroot.in/how-is-nginx-different-from-Apache

1
sarath