web-dev-qa-db-ja.com

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

Apacheがサーバーのメモリを使いすぎてクラッシュします。サーバーに4 GBの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を消費します。

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

11
Souljacker

Apacheのメモリ使用量を調整するための主なパラメータはMaxClientsです。値が小さすぎると、クライアント要求を処理するために使用可能なスロットが不足します。数が多すぎると、RAMをすべて使い果たし、パフォーマンスを低下させるスワップスペースの使用を開始します(サーバークラッシュのように見える場合があります)。

MaxClientsを調整する1つの方法は、システムのメモリ使用量を監視し、必要に応じて設定を調整することです。サーバーがスワップを開始した場合は、それを編集します。サーバーに空きメモリがある場合、それを置きます。

また、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の使用状況がわからない場合は、低い値から始めます。これがTweakの主要なパラメーターになります。
  • MaxRequestsPerChild:Apacheクライアント/子がいつ再起動されるかを指定します。間違った値はなく(非常に小さい値は非効率的かもしれません)、それは配信するコンテンツに依存します。動的コンテンツの場合、ゼロ以外の大きな値(たとえば1000)は、httpdプロセスが最終的に大きくなりすぎるのを防ぎます。
  • その他のパラメーター:残りのパラメーターを完全にベンチマークしていませんが、非常に低いまたは非常に高い値に設定しない限り、比較的小さな影響しかありません。値。ほとんどのサイトではデフォルトを使用することで問題ありません。各モジュールで使用されているパラメーターの完全な説明については、Apache Prefork または Worker モジュールのドキュメントを参照してください(パラメーターを調整しようとしても意味がありません。使用する)。
  • ベンチマーク:パラメータを調整するときは、サーバーの機能に関する数値を取得するために、ab(ApacheBench)やsiegeなどのベンチマークツールを使用することをお勧めします。 soleyを感じまたは悪化に頼って、それがクラッシュするかどうかを確認することは、Webサーバーのパラメーターを調整するための良い方法ではありません。
14
uesp