web-dev-qa-db-ja.com

Apache 2.2 mpm_worker:より多くのスレッドまたはより多くのプロセス?

ApacheでワーカーMPMを使用する場合、子プロセスの数と子プロセスごとのサーバースレッドの数をいじることができます。

それぞれの長所と短所は何ですか?どちらの状況でどちらを増やしますか?

17
sh-beta

これまでのところ、これらはスレッドとプロセスを決定する際の最大の考慮事項でした。

  1. スレッドが使用する常駐メモリは、プロセスよりもはるかに少なくなります。はい、動的にリンクされたライブラリでは、Apacheコントロールプロセスとその子プロセス間で多くのメモリが共有されますが、新しいプロセスごとに、有効にしたすべてのモジュールをインスタンス化する必要があります。

    これは、たとえば、5つのプロセスとそれぞれ1つのスレッド、または5つのプロセスとそれぞれ25のスレッドがある場合に、各プロセスのメモリ使用量を比較することで簡単にテストできます。ここでは、スレッドの量に関係なく、各子プロセスに約7 MBが必要です。

    +スレッドの場合

  2. スレッドよりも、新しいプロセスのロードにかかる時間とCPUサイクルの開始に時間がかかります。これは、「ab」を介して提供されるページの平均量を確認することでテストできます。

    +スレッドの場合

  3. プロセススレッドはすべてプロセスに依存します。ここでの最大の懸念は、プロセスに何かが発生した場合、それに関連付けられているすべてのスレッドに影響を与えることです。多数のスレッドを持つ単一のプロセスで実行している場合、プロセスが終了するとスレッドも終了します。したがって、プロセス数が多いほど分離が改善され、結果として「フォールト」トレランスが向上します。

    +プロセスの場合

  4. (3)に関連して、PHPなどのモジュールの場合、それらのメモリはプロセスによってロードされ、すべてのスレッドで共有されます。つまり、以下の25のスレッドでmemory_limitを100Mbsに設定したphpを使用している場合、技術的には最大負荷で各スレッドはそれぞれ最大4MBを割り当てることができます(もちろん、この方法では発生しません。飢餓)。

つまり、結局のところ、それは実際にユースケースに依存します..とはいえ、使用するスレッドの量を最大化して、メモリ使用量を減らし、応答性を向上させる必要があります。ただし、フォールトトレランスを向上させるには、適切な量のプロセスとバランスをとる必要があります。

もちろん、私はこれについて心配する必要があったので、ここでは専門家ではありません。そのため、他の回答がここに表示される可能性があることを楽しみにしています!

25