Apacheのメモリ使用量を調整するための主なパラメータはですMaxClients
。値が小さすぎると、クライアント要求を処理するために使用可能なスロットが不足します。数が多すぎると、すべてのRAMを使い果たし、パフォーマンスを低下させるスワップ領域の使用を開始します(サーバーのクラッシュのように見えることがあります)。
チューニングの1つの方法はMaxClients
、システムのメモリ使用量を観察し、必要に応じて設定を調整することです。サーバーがスワップを開始した場合は、それを下に編集します。サーバーに空きメモリがある場合、それを置きます。
また、Apacheのメモリ使用量を確認して、最大値を見積もることもできます。を起動top
して押しM
、プロセスをメモリでソートします。次のようなものが表示されます。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
RES列とSHR列を差し引いて、Apacheインスタンスごとのおおよそのメモリ使用量を取得します。この場合は約16MBです。4GBのRAMがあり、その3GBをApacheで使用したい場合、MaxClients設定は次のようになります。
MaxClients = 3000/16 = 188
したがって、この場合、150〜200の値で開始する可能性がありますが、メモリ使用量を監視し、それがスワップの使用に近づき始めた場合は、MaxClientsを10〜20%減らします。また、3GBの値は単なるランダムな例であることにも注意してください。Apacheのみを実行しているサーバーでは、4GBのほぼすべてを使用できる可能性があります。他の場合では、Apacheに1 GBまたは2 GBだけを残して、残りを他のアプリケーション、システム、またはキャッシュに保存することができます。
編集:追加の質問への回答
通常、MaxClientsやその他のApache構成パラメーターの魔法の値はなく、サーバーが突然2倍の速度で動作します。MaxClientsが10でも1000でも、一部のサーバーは正常に動作しているように見えます。MaxClients設定が「不良」である主なケースが2つあります。
- 低すぎる:MaxClientsが低すぎると、すべてのApacheクライアントが使用されており、新しい接続が次のクライアントが使用可能になるのを待機するキューに入れられる状況に到達します。Apacheのmod_statusを有効にすると、ある時点でビジー状態のクライアントの数をリアルタイムで表示できます。トラフィックが多いときにサイトが遅くなり、すべてのクライアントが使用中であることが確認できるため、この状態は比較的簡単に診断できます。
- 高すぎる:MaxClientsが高すぎると、すべてのRAMを使い果たしてスワップを使用し始める場合があります。これが発生すると、サイトのパフォーマンスは本質的にゼロに低下します(RAMとディスクの速度の違いを考慮してください)。サーバーがトラフィックのスパイクを経験するまで、サーバーが高いMaxClientsで正常に実行されるため、この状態を観察および診断することははるかに困難です。たとえば、1時間に数回ヒットするサイトでは、RAMでサポートできるよりもはるかに多いMaxClientsを1000に設定できますが、Apacheが一度に1つまたは2つのクライアントを使用するだけでよいため、問題が発生することはありません。RAMが使い果たされてスワップ領域が必要になるまで、トラフィックのスパイクが発生し、同時に使用されるクライアントの数が増える場合にのみ、問題を特定します。
サーバー、アプリケーション、またはトラフィックの詳細はわかりませんが、出発点として次の構成値を提案できます。それらを試して、サーバーの負荷と使用状況を監視し、必要に応じて設定を変更してください。
- mod_status:これを有効にすると、Apacheの使用状況を確認できます。より高度な統計情報を得るには、Zabbix / Nagiosなどの監視アプリケーションをインストールして、サーバーの使用状況とトラフィックパターンを追跡できるようにします。
- MaxClients:100〜200の値に設定します。メモリ/ CPU / Apacheの使用状況がわからない場合は、低い値から始めます。これは微調整の主要なパラメータになります。
- MaxRequestsPerChild:これは、Apacheクライアント/子がいつ再起動されるかを指定します。間違った値はなく(非常に小さい値は非効率的かもしれません)、それは配信するコンテンツに依存します。動的コンテンツの場合、ゼロ以外の大きな値(たとえば1000)は、httpdプロセスが最終的に大きくなりすぎるのを防ぎます。
- その他のパラメーター:残りのパラメーターのベンチマークは徹底的に行っていませんが、非常に低い値または非常に高い値に設定しない限り、比較的小さな影響しかありません。ほとんどのサイトではデフォルトを使用することで問題ありません。各モジュールで使用されているパラメーターの詳細については、Apache PreforkまたはWorkerモジュールのドキュメントを参照してください(使用しないパラメーターを調整しようとしても意味がありません)。
- ベンチマーク:パラメータを調整するときは、ab(ApacheBench)やsiegeなどのベンチマークツールを使用して、サーバーの機能に関する数値を取得することをお勧めします。soleyを感じまたは悪化に頼って、それがクラッシュするかどうかを確認することは、Webサーバーのパラメーターを調整するための良い方法ではありません。