Apacheプロセスに5GBのメモリを割り当てました。
各Apacheプロセスが平均42.5MBを消費するという事実に基づいて、サーバーに次のように設定しました(各プロセスが50MBのメモリを消費するかのように計算します)。
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 100
MaxRequestsPerChild 0
</IfModule>
今質問のために:
StartServers
の量をどのように決定できますか?Worker mpm
(PHPなど)を設定することはできませんが、負荷分散はトラフィックが多い場合の最善のオプションですか?私はここで答えを読み、その質問をグーグルでたくさん検索しましたが、十分に具体的なものを見つけることができませんでした。
注意:ほとんどのApacheプロセスは、そのメモリのほとんどをその親/兄弟と共有します。 Apacheプロセスから割り当てられたメモリの値を簡単に合計することはできません。できる最善のこと:多くのApacheプロセスを開始し、これによって割り当てられたメモリがどのように変更されるかを確認します。
1:StartServersの重要性は限られています。これは、最初に開始される子プロセスの数を意味します。 Min/MaxSpareServersははるかに重要です。
2:理解できません。負荷分散ソリューションについて何も言わなかったのです。大量のトラフィックを処理できるようにしたい場合は、静的ファイルの提供にワーカーApache(または他のタイプのhttpサーバー)を使用し、動的にプリフォークベース(mpm-itkをお勧めします)を使用するのが最善の選択肢でした。言語(おそらくphp用)。ワーカーは、動的要求をプリフォークベースのサーバーに転送する必要があります。この構造は、負荷分散されたクラスターソリューションに簡単に拡張することもできます。
3:MayRequestPerChild == 0は、プロセスが再起動されないことを意味します。したがって、それらに問題がある場合、それは修正されていないか、またはそれらがリークしている場合、これも解決されません。システムが安定していて、サーバー側でのみ完全なガベージコレクション言語を使用している場合は問題ありません(php そうではありませんそのうちの1つです!)、しかし、実際的な理由から、大きな整数値を使用する方が良いと思います(ほとんどの場合、100または500を使用します)。注意:単純な子プロセスの再起動は、100〜500の要求の処理と比較して実際にはコストがかかりません。