回答:
ドキュメントが言うように、非スレッドセーフライブラリとの互換性のためにスレッド化を避ける必要がある場合は、prefork MPMを使用する必要があります。通常、非自明なApacheモジュール(mod_php
または、より正確には、それがリンクする無数の拡張機能とライブラリ-正規の例)には、ある種の非スレッドセーフライブラリ(または非スレッド-安全なコード))であるため、かなり標準のApacheインストールを使用していない限り、プリフォークMPMを使用します。
php-fpm
、FastCGI などを使用してPHPが接続されている場合には当てはまりません。ワーカーMPMは問題ありません。Apacheはスレッドを実行できますが、fpmはすべてのPHP要求を独自のプロセスで実行します。PHP-Thread-safetyの問題mod_php
は、Apacheプロセス内でPHPを実行するの使用を妨げるだけです。
多数(> 100)の同時接続を提供しながら安全でない拡張機能を実行する従来のソリューションは、fastCGI(mod_fcgid、ネイティブapacheモジュール)でPHPを実行し、Worker MPMを実行するapacheインスタンスからの動的リクエストをプロキシすることです。
これにより、静的コンテンツと動的コンテンツの両方を提供するときに、適度な量のメモリ(4〜8GB)で数百から1000を超える同時接続まで拡張できます。
もちろん、全体的な展開(memcached、ニス)の一部としてフロントエンドキャッシュソリューションも調査する必要があります。
または、apache 2.4とそのネイティブイベント MPM にアップグレードします。これにより、同時実行性が大幅に改善されます(スレッドは、ポーリングを待機せずに、接続時に起動されます)。
これはあなたが仕えているものに非常に特有なものです。静的接続をほとんど行わない場合、スレッドはより軽量で高速になります。頻繁に生成される大きなアプリが数個しかない場合、preforkは成熟度と安定性のために優位に立つ可能性があります。必要なものだけをセットアップし、テストして、MPMモジュールを交換し、もう一度試して、どちらがより適しているかを確認してみませんか?
それはあなたが持っているトラフィックの種類と種類に必要です。また、最初に、プリフォークとワーカーの主な違いを理解する必要があります。以下の記事があなたの理解に役立つことを願っています! http://slashroot.in/how-is-nginx-different-from-apache