web-dev-qa-db-ja.com

Ubuntu 14.04サーバーでApacheを調整する方法

現在、Ubuntu 14.04の私のApache 2(正確にはApache 2.4.7)で、次の設定をしています。

/ etc/Apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>
StartServers                    20
MinSpareServers                 100
MaxSpareServers                 250
MaxRequestWorkers               150
MaxConnectionsPerChild          0
</IfModule>

サーバーは8 GB(RAM)のAmazonサーバーで、一部のGoogle広告キャンペーン用に3ページのサインアップフォームをロードするだけです。

Web上で apachetuneit.sh というスクリプトを見つけましたが、しばらくしてからApacheがこのエラーを報告していました。

[2015年4月21日16:45:42.227935 2015] [mpm_prefork:error] [pid 1134] AH00161:サーバーがMaxRequestWorkers設定に達しました。MaxRequestWorkers設定を上げることを検討してください

これらの設定方法をどのように判断できますか?

私は特にApache 2.4をチューニングする方法のみを求めています。これが、この質問が この質問と異なる理由です。

18
ServerChecker
  1. Ubuntu 14.04は、Apache 2でPHP mpm_preforkモジュールを介して実行)を使用することを認識してください。このモジュールの編集可能なファイルは、/ etc/Apache2/mods-enabled/mpm_prefork.confにあります。また、Apache 2.4以降、MaxClientsMaxRequestWorkersに名前が変更されているため、MaxClientsに関するすべてのドキュメントをMaxRequestWorkersに切り替える必要があることを認識してください。

  2. 次のコマンドでApache Webサービスを一時的に停止します。

    SudoサービスApache2停止
  1. 5秒待ってから次のコマンドを実行して、サーバー上にある仮想メモリの空き容量を確認します。
    Sudoフリー-ht

Mem:行を読み、空いている列を見てください。これは、Apache専用のRAMの量と見なしますが、通常は、4GBを超えるようなサーバーの場合は2GB)、または軽量のサーバーの場合は1GBを差し引きます。無料の列に13 GBの空きがあると表示された場合は、Apache 11 GBを与えることをお勧めします。これはベースラインです。ログにデータベースの問題が時々発生する場合(3日間でログに3回など)、さらに必要です。メモリの場合、11 GBではなく10 GBしかなかったと考えるかもしれません(この場合)。Apacheログでサーバーがさらに多くのMaxRequestWorkersを必要とする場合、それは以下で扱う別の問題です。

  1. Apache Webサーバーを起動します。
    SudoサービスApache2開始
  1. 10個のブラウザタブのように開いて、ウェブサイトから長いまたは遅いロードのページに接続し、各タブで3〜4回更新します。

  2. その後、次のコマンドをすばやく実行します。

    Sudo ps -ylC Apache2 | awk '{x + = $ 8; y + = 1} END {print "Apache Memory Usage(MB):" x/1024; print "Average Process Size(MB):" x /((y-1)* 1024)} '

5回ほど素早く走らせます。

プロセスの平均サイズの値を確認し、実行した5回の平均値を確認します。

次の計算を行い、必要に応じてGBをMBに変換して、すべての数値がMB値になるようにします。したがって、1024倍するか、1024で除算します。どちらの方法を使用するかによって異なります。

MaxRequestWorkers = ベースライン空き(バッファスペースあり)/ 平均プロセスサイズ

たとえば、14GBのサーバーがありましたが、Apacheが停止すると、サーバーは1GBを使用したことを示しましたRAMアイドル状態です。次に、必要に応じて、OSに追加のバッファー領域に1GBを追加しますつまり、12 GBのベースラインフリーがあることを意味します。これをGBからMBに変換する必要があるため、12 x 1024を乗算して12288を取得します。12288MBは、ベースラインフリーの値です。私の場合、平均プロセスサイズは21MBだったので、12288/21を取り、約585を取得します。今では、sysopがこの値を切り捨てて580を取得するのが一般的です。

  1. /etc/Apache2/mods-enabled/mpm_prefork.confファイルを編集し、次のデフォルトに設定することを検討してください。XXXをMaxRequestWorkersの計算で置き換えます。
`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>

そこにServerLimitパラメータが表示されない場合があることに注意してください。追加してください。このパラメーターが存在しない場合のデフォルトは256ですが、MaxRequestWorkersと同じ値にする必要があります。そうしないと、エラーが発生します。

  1. Apache構成のもう1つの重要な要素は、タイムアウト変数を含む/etc/Apache2/Apache2.confファイルであり、秒単位で測定されます。これは、タイムアウトになるまでにサーバーとの間で送受信できる時間です。たとえば、ユーザーがCSVやその他の大きなファイルをアップロードまたはダウンロードできるWebサイトがある場合など、ファイルのアップロードまたはファイルのダウンロードにも留意する必要があります。そして、あなたは忙しいデータベースサーバーと、ページがタイムアウトする前に時間を提供する必要があるかもしれない場所を覚えておく必要があります。タイムアウト変数を小さくするほど、Webサーバーが新しい接続を受信するために利用できる量が増えます。ただし、この値を低く設定しすぎると、PHPセッション変数でブラウザセッションベースのCookieを使用しない場合でも、混乱が生じる可能性があります。たとえば、値が300(5分)の場合、 PHPブラウザセッションCookieの代わりにWebアプリワークフローのセッション変数に依存するWebサーバーに適しています。45の値は、静的な広告以外に機能しないWebサーバーに適しています。ランディングページですが、PHPセッション変数を大量に使用する必要があるサーバーにとってはひどいでしょう。そのため、このファイルのTimeoutパラメータを必要な量に編集してください。これにはいくつかのテストが必要になる場合があります。すべてのWebページで値が小さすぎるかどうかを確認します。ただし、大きなファイルのアップロードや大きなファイルのダウンロードで問題が発生しない限り、300を超えないように設定することをお勧めします。

  2. 次に、Apache Webサービスを再起動します。あなたが何か間違ったことをした場合、Apacheはあなたがそれを再開した瞬間にそのことを知らせてくれるでしょう、そしてあなたはそれを修正することができます。

    SudoサービスApache2の再起動
  1. ここで、以前行った10タブブラウザーのトリックを繰り返し、Apache WebサーバーエラーログでApache構成エラーが発生するかどうかを確認します。
    sudo tail -f /var/log/Apache2/error.log

...必要に応じて、CTRL + Cを押してそれから抜け出します。

MaxRequestWorkersの必要性について(そして最近、Webサーバーを再起動してから)、不満を探します。最適なMaxRequestWorkers設定を使用している場合でも、WebサイトまたはWebアプリケーションにさらに多くの火力が必要になる可能性があります。次のオプションを検討してください。

  • 大きなファイルのダウンロード、画像、スクリプトにCDNを使用する。
  • CloudFlareなどのキャッシュサービスを使用する。
  • ロードバランサーの背後で1つの「Webアプリ」として機能する複数のWebサーバーを使用するようにWebサイトまたはWebアプリケーション戦略をやり直します。
  • サーバーにRAMを追加して、この計算を最初からやり直します。

  1. Apacheサーバーが調整されたので、それは一種のベースライン調整です。 2〜3週間かけて確認し、ApacheエラーログでMaxRequestWorkerの問題を探す必要があります。それから、最適化を決定できます(ステップ10を参照)。また、Ubuntuにaptを使用してMuninをインストールし、Apacheのパフォーマンスを経時的に調べて、Webサーバーが処理しているトラフィック量について何かする必要があると判断する前に、成長のアイデアをプロットすることもできます。
46
ServerChecker

MaxRequestWorkersを上げることができるものは、httpd/ApacheプロセスのそれぞれがどれだけRAMを使用するかによって異なります。それぞれが50MBを使用する場合(乱数を選択するだけ)、一度に使用している20個のリクエストワーカー(つまり、同時接続)ごとに1GBを使用します。したがって、その例では、最大8GB * 20 = 160のMaxRequestWorkersを使用できます。ただし、ApacheのRAMをすべて使い切ることはできません。そこで実行されている他のもののためにいくつかを予約する必要があります。また、予備のRAMを残しておくと、OSがキャッシュを使用してパフォーマンスを高速化するため、パフォーマンスに役立ちます(サーバーが非常に高速である場合と比較して、接続が不足しない方が望ましい場合があります)ユーザーのブラウザがすべて使用された場合に接続が利用可能になるのを待つ間、サイトは遅く表示されます。

3
g491