Ubuntu 14.04は、mpm_preforkモジュールを介して実行されるPHPでApache 2を使用することを認識します。このモジュールの編集可能ファイルは/etc/apache2/mods-enabled/mpm_prefork.confにあります。また、Apache 2.4以降では、MaxClientsの名前がMaxRequestWorkersに変更されているため、MaxClientsに関するドキュメントはMaxRequestWorkersに切り替える必要があります。
次のコマンドを使用して、一時的にApache Webサービスを停止します。
sudo service apache2 stop
- 5秒待ってから、次のコマンドを実行して、サーバー上の空きメモリ量を確認します。
sudo free -ht
Mem:行を読んで、無料の列を見てください。これは、Apache専用のRAMの量と考えてください。ただし、通常は、より堅牢なサーバーでは2 GB(4 GB以上)、またはより軽量なサーバーでは1 GBを差し引きます。したがって、無料のコラムで13GBの空き容量があると言われた場合、Apache 11GBを提供することをお勧めします。それがベースラインです。より多くのメモリを必要とするデータベースの問題がログで3日間にわたって3回発生するなど、ログで時々データベースの問題が発生した場合、11GBではなく10GBしか使用できないと考えられます(この場合)。Apacheログで、サーバーがさらにMaxRequestWorkersを必要とする場合は、以下で対処する別の問題です。
- Apache Webサーバーを起動します。
sudo service apache2 start
10個のブラウザタブのように開き、ウェブサイトから読み込み時間が長いまたは遅いページに接続し、各タブで3〜4回更新します。
それを行った後、次のコマンドをすばやく実行します。
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を取得しました。
- ファイル/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と同じ値である必要があります。そうしないと、エラーが発生します。
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より大きく設定しないことをお勧めします。
次に、Apache Webサービスを再起動します。あなたが何か間違ったことをした場合、Apacheはあなたがそれを再び開始した瞬間にそれについてあなたに話すでしょう、そしてあなたはそれを修正することができます。
sudo service apache2 restart
- ここで、以前に行った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を追加し、この計算をやり直します。
- Apacheサーバーが調整されたので、調整されたベースラインのようなものです。2〜3週間かけて確認し、ApacheエラーログでMaxRequestWorkerの問題を探す必要があります。それから、最適化に関する決定を行うことができます(ステップ10を参照)。また、Ubuntuにaptを使用してMuninをインストールし、Apacheのパフォーマンスを経時的に確認し、Webサーバーが処理するトラフィック量について何かする必要があると判断する前に、成長のアイデアをプロットすることもできます。