現在、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をチューニングする方法のみを求めています。これが、この質問が この質問 。と異なる理由です。
Ubuntu 14.04は、Apache 2でPHP mpm_preforkモジュールを介して実行)を使用することを認識してください。このモジュールの編集可能なファイルは、/ etc/Apache2/mods-enabled/mpm_prefork.confにあります。また、Apache 2.4以降、MaxClientsはMaxRequestWorkersに名前が変更されているため、MaxClientsに関するすべてのドキュメントをMaxRequestWorkersに切り替える必要があることを認識してください。
次のコマンドでApache Webサービスを一時的に停止します。
SudoサービスApache2停止
Sudoフリー-ht
Mem:行を読み、空いている列を見てください。これは、Apache専用のRAMの量と見なしますが、通常は、4GBを超えるようなサーバーの場合は2GB)、または軽量のサーバーの場合は1GBを差し引きます。無料の列に13 GBの空きがあると表示された場合は、Apache 11 GBを与えることをお勧めします。これはベースラインです。ログにデータベースの問題が時々発生する場合(3日間でログに3回など)、さらに必要です。メモリの場合、11 GBではなく10 GBしかなかったと考えるかもしれません(この場合)。Apacheログでサーバーがさらに多くのMaxRequestWorkersを必要とする場合、それは以下で扱う別の問題です。
SudoサービスApache2開始
10個のブラウザタブのように開いて、ウェブサイトから長いまたは遅いロードのページに接続し、各タブで3〜4回更新します。
その後、次のコマンドをすばやく実行します。
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を取得するのが一般的です。
`<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サーバーが新しい接続を受信するために利用できる量が増えます。ただし、この値を低く設定しすぎると、PHPセッション変数でブラウザセッションベースのCookieを使用しない場合でも、混乱が生じる可能性があります。たとえば、値が300(5分)の場合、 PHPブラウザセッションCookieの代わりにWebアプリワークフローのセッション変数に依存するWebサーバーに適しています。45の値は、静的な広告以外に機能しないWebサーバーに適しています。ランディングページですが、PHPセッション変数を大量に使用する必要があるサーバーにとってはひどいでしょう。そのため、このファイルのTimeoutパラメータを必要な量に編集してください。これにはいくつかのテストが必要になる場合があります。すべてのWebページで値が小さすぎるかどうかを確認します。ただし、大きなファイルのアップロードや大きなファイルのダウンロードで問題が発生しない限り、300を超えないように設定することをお勧めします。
次に、Apache Webサービスを再起動します。あなたが何か間違ったことをした場合、Apacheはあなたがそれを再開した瞬間にそのことを知らせてくれるでしょう、そしてあなたはそれを修正することができます。
SudoサービスApache2の再起動
sudo tail -f /var/log/Apache2/error.log
...必要に応じて、CTRL + Cを押してそれから抜け出します。
MaxRequestWorkersの必要性について(そして最近、Webサーバーを再起動してから)、不満を探します。最適なMaxRequestWorkers設定を使用している場合でも、WebサイトまたはWebアプリケーションにさらに多くの火力が必要になる可能性があります。次のオプションを検討してください。
MaxRequestWorkersを上げることができるものは、httpd/ApacheプロセスのそれぞれがどれだけRAMを使用するかによって異なります。それぞれが50MBを使用する場合(乱数を選択するだけ)、一度に使用している20個のリクエストワーカー(つまり、同時接続)ごとに1GBを使用します。したがって、その例では、最大8GB * 20 = 160のMaxRequestWorkersを使用できます。ただし、ApacheのRAMをすべて使い切ることはできません。そこで実行されている他のもののためにいくつかを予約する必要があります。また、予備のRAMを残しておくと、OSがキャッシュを使用してパフォーマンスを高速化するため、パフォーマンスに役立ちます(サーバーが非常に高速である場合と比較して、接続が不足しない方が望ましい場合があります)ユーザーのブラウザがすべて使用された場合に接続が利用可能になるのを待つ間、サイトは遅く表示されます。