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


17

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

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

回答:


25

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

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

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

    +スレッド用

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

    +スレッド用

  3. プロセススレッドはすべてプロセスに依存します。ここでの最大の懸念は、プロセスに何かが発生すると、プロセスに関連付けられているすべてのスレッドに影響することです。多数のスレッドを持つ単一のプロセスで実行している場合、プロセスが終了するとスレッドも終了します。したがって、より多くのプロセスはより良い分離を引き起こし、そうするならより大きな「フォールト」耐性をもたらします。

    +プロセス用

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

そのため、最終的には実際にユースケースに依存します..そうは言っても、メモリ使用量を減らして応答性を高めるために、使用するスレッドの量を最大化する必要があります。ただし、フォールトトレランスを向上させるには、適切な量のプロセスとバランスを取る必要があります。

もちろん、私は最近これに関心を持つようになったので、ここの専門家ではありません。そこで、他の答えがここに現れるかもしれないのを楽しみにしています!


1
いくつかの良い一般的な情報のために+1。ただし、可能であれば、より詳細/具体的な詳細を確認したいと思います。
sh-beta
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.