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


18

現在、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を調整する方法のみを具体的に求めています。この質問は、より異なっている理由はここにあり、この質問



@JennyDこの記事は、この特定のニーズにはあまりにも広すぎます。
ServerChecker

これらの特定の設定を判断する方法は、負荷テストを行うことです。
ジェニーDは、モニカーを復活させる

@JennyDそれはそれよりもさらに簡単です。ap.shスクリプトを通常の負荷で1日に複数回、平均して使用し、以下のcloudinserviceリンクごとに計算を行い、MaxRequestWorkersをその値に設定します。次に、ApacheログでMaxRequestWorkersの問題を監視し、増加、RAMの追加、CloudFlareの追加、または別のWebノードの追加を行います。非常に激しい負荷テストを行う必要はありません。
ServerChecker

そのスクリプトに関する情報を含む回答と、自分の回答に含めたリンクから、重複の可能性があると指摘した質問に関連するものを書くことができます。
ジェニーDは、モニカ

回答:


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

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

    sudo service apache2 stop
  1. 5秒待ってから、次のコマンドを実行して、サーバー上の空きメモリ量を確認します。
    sudo free -ht

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

  1. Apache Webサーバーを起動します。
    sudo service apache2 start
  1. 10個のブラウザタブのように開き、ウェブサイトから読み込み時間が長いまたは遅いページに接続し、各タブで3〜4回更新します。

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

    sudo ps -ylC apache2 | awk '{x + = $ 8; y + = 1} END {print "Apache Memory Usage(MB):" x / 1024; print "平均プロセスサイズ(MB):" x /((y-1)* 1024)} '

5回ほど高速で実行します。

Average Process Sizeの値を見て、それを実行した5回の間でその値を平均します。

次の計算を行い、必要に応じてGBをMBに変換して、すべての数値がMB値になるようにしてください。したがって、必要な方法に応じて、1024倍するか、1024で除算します。

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

たとえば、14 GBのサーバーがありましたが、Apacheが停止したとき、サーバーはアイドル状態で1 GBのRAMを使用していることを示しました。次に、必要に応じて、OSの追加のバッファースペースに1GBを追加します。つまり、12GBのBaseline Freeがあります。次に、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サーバーが新しい接続を受信できるようになります。ただし、この値の設定が低すぎると、ブラウザセッションベースのCookieではなく、PHPセッション変数で大混乱が生じる可能性があることに注意してください。したがって、たとえば、値300(5分)は、ブラウザーセッションCookieではなくWebアプリワークフローのPHPセッション変数に依存するWebサーバーに適している場合があります。45の値は、静的な広告ランディングページ以外のサービスを提供しないWebサーバーには適しているかもしれませんが、PHPセッション変数を大量に使用する必要があるサーバーにはひどいでしょう。そのため、このファイルのTimeoutパラメーターを必要な量に編集します。これには、値が低すぎるかどうかを確認するために、すべてのWebページでいくつかのテストが必要になる場合があります。ただし、大きなファイルのアップロードまたは大きなファイルのダウンロードで問題が発生しない限り、300より大きく設定しないことをお勧めします。しかし、PHPセッション変数を大量に使用する必要があるサーバーにとってはひどいでしょう。そのため、このファイルのTimeoutパラメーターを必要な量に編集します。これには、値が低すぎるかどうかを確認するために、すべてのWebページでいくつかのテストが必要になる場合があります。ただし、大きなファイルのアップロードまたは大きなファイルのダウンロードで問題が発生しない限り、300より大きく設定しないことをお勧めします。しかし、PHPセッション変数を大量に使用する必要があるサーバーにとってはひどいでしょう。そのため、このファイルのTimeoutパラメーターを必要な量に編集します。これには、値が低すぎるかどうかを確認するために、すべてのWebページでいくつかのテストが必要になる場合があります。ただし、大きなファイルのアップロードまたは大きなファイルのダウンロードで問題が発生しない限り、300より大きく設定しないことをお勧めします。

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

    sudo service apache2 restart
  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サーバーが処理するトラフィック量について何かする必要があると判断する前に、成長のアイデアをプロットすることもできます。

「これらのリンクは質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供する方が良いでしょう。リンク先のページが変更された場合、リンクのみの答えは無効になることができます「。
ジェニーDが復活モニカ言う

@JennyD良い点!やります。
ServerChecker

@モデレーターこの回答の書式設定のヘルプが必要です。ステップ7は、インデント付きのconfファイルであると想定されていました。ステップ11は、インデントされるべきではありませんでした。で始まるコードコマンドsudoは、通常のテキストではなくコードとして表示する必要があります。フォーマットに関するドキュメントに従いましたが、それでもここで苦労しています。
ServerChecker

1
私はできることをしました-マークダウンは混合リストとコードを実際にはうまく行いませんが、とにかくそれを少し良くすることができたと思います。
ジェニーDは、モニカーを復活させる

私のようなCentos初心者の場合:ps -ylC apache2ではなくps -lyU apache
user1928596

3

MaxRequestWorkersを上げることができるものは、各httpd / apacheプロセスが占有するRAMの量に依存します。それぞれが50MBを使用する場合(乱数を選択する場合)、一度に使用するリクエストワーカー(同時接続)の20個ごとに1GBが使用されます。そのため、その例では、最大で8GB * 20 = 160個のMaxRequestWorkersを使用できます。ただし、ApacheにすべてのRAMを使い切ることはできません。そこで実行されている他のもののために一部を予約する必要があります。また、いくつかの予備のRAMを残すことは、OSがキャッシュを使用してパフォーマンスを高速化するためにパフォーマンスに役立ちます(ただし、ユーザーのブラウザは、接続がすべて使い果たされると接続が利用可能になるのを待ちます)。


これをプロファイルする良い方法は何ですか?各apacheプロセスが負荷の下でどのくらいのRAMを使用しているかを確認するには、どのコマンドを入力できますか?また、MySQL(WordPressサイト)と通常のシステムプロセス用のRAMルームも必要です。
ServerChecker

実行中のプロセスの数を確認し、freeコマンドを実行してメモリベースラインを取得します。次に、MinSpareServersを増やし、Apacheを再起動し、free再度実行して、計算を実行することにより、実行するプロセスの数を増やします。チェックアウトmoreofless.co.uk/apache-memory-usageの詳細および説明について。
g491

私は今、これを行うための超高速の方法があることを学びました。以下の私の回答のcloudinservice.comリンクで説明されています。コマンドは誰かが考え出したap.shです。また、Apache 2.4+ではMaxClientsがMaxRequestWorkersに名前が変更されたことを知りました。
ServerChecker
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.