次の設定でMagentoを実行しているサイトがあります。
各PHP-FPMプロセスは、約80MBのRAMを消費します。
PHP-FPMとmpm_workerの設定を微調整したいと思います。ドキュメントを読んで、PHP-FPMとmpm_workerのオプションの関係について少し混乱しています。
たとえば、PHP-FPMには、pm.min_spare_servers
、pm.max_spare_servers
、pm.start_servers
、およびmax_children
の構成があります。 PHP-FPMに関してこれらのオプションが何を意味するのか理解しています。
ただし、mpm_workerの構成は、MinSpareThreads
、MaxSpareThreads
、StartServers
、およびThreadLimit
です。繰り返しますが、mpm_workerに分離されているので、彼らが何をしているのか理解しています。
私の質問は、これらの構成は互いにどのように関連しているかということです。 StartServers=2
とThreadsPerChild=25
を設定したとしましょう。これにより、Apache/mpm_workerに関して最初に50スレッドが得られます。次にpm.start_servers = 50
を設定すると、PHP-FPMは最初に50個のプロセスを生成します。
では、これらの50個の「Apache」スレッドと50個の「PHP-FPM」プロセスの関係は何でしょうか。各Apacheスレッドは1つのPHP-FPMプロセスを利用しますか?
誰かがこれについて何らかの洞察を与えることができることを願っています。
ありがとう!
Apacheはスレッドの子を使用してクライアントからのリクエストを処理しますが、phpファイルに対してはPHP-FPMのみを呼び出します。画像、css、jsはApacheから直接提供する必要があるため、PHP-FPMスレッドを消費しません。
PHP-FPMには子のない複数のスレッドがあり、各スレッドはApacheからのリクエストを処理します。
AFAIK、ApacheでKeepAliveが設定されていない場合、同じクライアントからの複数のリクエスト(ページの読み込み、画像、css、js)は複数のスレッドを消費するはずです。 このリンクを参照 キープアライブの詳細については。
私は最近Apacheサーバーを自分で調整していて、複数のコアがある場合は、スレッドあたりの子の数を増やす方がよいことがわかりました。
関係は動的にマッピングされます。これらは別々のプロセスであり、別々のサーバーで実行することもできるため、構成オプションが豊富にあります。
Apacheプロセス/スレッドは初期接続を処理し、次にphp-fpmプロセスを使用してPHPファイルを解析してリクエストを返します。
ここには、どれを構成するかをアドバイスするための変数がたくさんありますが、通常は、リクエストをリアルタイムで処理するのに十分なスレッドがあるようにApacheを構成し、php-fpmを構成してPHPスクリプト/ウェンサイトには実行するのに十分なメモリがあります。さまざまなキャッシュオプションが考えられるため、これは実行中のシステムのベンチマークによってのみ決定できます。