Apacheのメモリ使用量の最適化


11

Apacheがサーバーのメモリを使いすぎてクラッシュします。サーバーには4GBのRAMがあります。

パフォーマンスを向上させるためにApacheの設定を微調整しようとしていますが、これはかなり新しいです。

私はこの記事のアドバイスに従おうとしいましたが、計算方法がわからず、さらに悪化しているようです。

私のトップは次のようになります:

11697 apache    15   0  322m  37m 4048 S  0.0  0.9   0:00.52 httpd
13602 apache    15   0  323m  37m 3944 S  0.0  0.9   0:00.50 httpd
11786 apache    15   0  322m  36m 4052 S  0.0  0.9   0:00.50 httpd
12525 apache    15   0  322m  36m 4040 S  0.0  0.9   0:00.63 httpd
11806 apache    15   0  322m  36m 3952 S  0.0  0.9   0:00.42 httpd
11731 apache    15   0  322m  36m 4036 S  0.0  0.9   0:00.46 httpd
11717 apache    16   0  322m  36m 3956 S  0.0  0.9   0:00.54 httpd
11659 apache    15   0  322m  36m 3980 S  0.0  0.9   0:00.49 httpd

だから、それは

MaxClients = 3000/ (322-37) = 10

そうですか?また、MinSpareServers、MaxSpareServers、MaxRequestsPerChild、StartServers、MinSpareThreads、MaxSpareThreads、ThreadsPerChild、M​​axRequestsPerChildなどの他のパラメーターの値はどのようにする必要がありますか?

誰かが私を助けてくれませんか?

更新

私はあなたたちが提案したことを試しました。動作しますが、しばらくの間です。サーバーの起動後しばらくすると、メモリ使用量は増加し続け、ダウンすることはありません。

つまり、サーバーを起動した後、オンラインに500人のユーザーがいるとします。サーバーはX RAMを消費します。2時間後、同じ500ユーザーがオンラインの場合、サーバーは10X RAMを消費します。

これを回避する方法はありますか、それともサーバーを監視し、時々再起動する必要がありますか?


1
質問に更新を追加するときは、回答を投稿するのではなく、オリジナルを編集してください。これには、質問を再びトップページの上部にぶつけるという追加のボーナスもあります。
Ben Pilbrow、2011

回答:


14

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サーバーのパラメーターを調整するための良い方法ではありません。

MaxClientsは、Apache 2.4以降、MaxRequestWorkersに名前が変更されました。
jastram '22年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.