web-dev-qa-db-ja.com

EC2スモールインスタンスで最大のRAMパフォーマンスを実現するために各プリフォークスレッドが必要とするWordpress

読んでください Making WordPress Stable on EC2-Micro

「Apacheのチューニング」セクションでは、彼がプリフォーク構成の番号をどのように考え出しているのかよくわかりません。

彼は、私が得た平均的なプロセスの数値を取得する方法を説明します。しかしその後:

または、プロセスあたり約53MB ...この場合、10個のスレッドが安全であるはずです。これは、10を超える同時リクエストを受信した場合、ワーカースレッドが使用可能になるまで他のリクエストがキューに入れられることを意味します。パフォーマンスを最大化するために、この数のスレッドを常に使用できるようにシステムを構成します。

プロセスあたり53MBから、613MBのRAMで、彼はどういうわけかこの構成を取得しますが、私は取得しません。

<IfModule prefork.c>
 StartServers       10
 MinSpareServers    10
 MaxSpareServers   10
 MaxClients       10
 MaxRequestsPerChild  4000
</IfModule>

彼はこれをプロセスあたり53MBから、613MBの制限でどの程度正確に取得しますか?

ボーナス質問

以下から、小さなインスタンス(1.7 GBメモリ)で、適切な設定は何でしょうか?

bitnami@ip-10-203-39-166:~$ ps xav |grep httpd
 1411 ?        Ss     0:00      2     0 114928 15436  0.8 /opt/bitnami/Apache2/bin/httpd -f /opt/bitnami/Apache2/conf/httpd.conf
 1415 ?        S      0:06     10     0 125860 55900  3.1 /opt/bitnami/Apache2/bin/httpd -f /opt/bitnami/Apache2/conf/httpd.conf
 1426 ?        S      0:08     19     0 127000 62996  3.5 /opt/bitnami/Apache2/bin/httpd -f /opt/bitnami/Apache2/conf/httpd.conf
 1446 ?        S      0:05     48     0 131932 72792  4.1 /opt/bitnami/Apache2/bin/httpd -f /opt/bitnami/Apache2/conf/httpd.conf
 1513 ?        S      0:05      7     0 125672 54840  3.1 /opt/bitnami/Apache2/bin/httpd -f /opt/bitnami/Apache2/conf/httpd.conf
 1516 ?        S      0:02      2     0 125228 48680  2.7 /opt/bitnami/Apache2/bin/httpd -f /opt/bitnami/Apache2/conf/httpd.conf
 1517 ?        S      0:06      2     0 127004 55796  3.1 /opt/bitnami/Apache2/bin/httpd -f /opt/bitnami/Apache2/conf/httpd.conf
 1518 ?        S      0:03      1     0 127196 54208  3.0 /opt/bitnami/Apache2/bin/httpd -f /opt/bitnami/Apache2/conf/httpd.conf
 1531 ?        R      0:04      0     0 127500 54236  3.0 /opt/bitnami/Apache2/bin/httpd -f /opt/bitnami/Apache2/conf/httpd.conf
2
two7s_clash

計算の背後にある考え方は、他のもの(インスタンスで実行されているオペレーティングシステムや他のサービス)のためにいくらかのメモリを保持する必要があるということです。その後、残っているものが何であれ、使用されている平均メモリ(常駐セットサイズ-RSS列)で除算して、サーバーがメモリを使い果たすことなく処理できるスレッドの最大数を取得します。

そうは言っても、私は少し違った方法で計算を行うのが好きですが、それについては後で説明します。

Httpd.confから:

プレフォークMPM

  • StartServers:開始するサーバープロセスの数
  • MinSpareServers:スペアに保たれるサーバープロセスの最小数
  • MaxSpareServers:スペアに保持されるサーバープロセスの最大数
  • ServerLimit:サーバーの存続期間中のMaxClientsの最大値
  • MaxClients:開始できるサーバープロセスの最大数
  • MaxRequestsPerChild:サーバープロセスが処理するリクエストの最大数

表示した構成では、一定の10プロセスが実行され続けます。10プロセスを開始し(StartServers)、許可するサーバープロセスは最大10個あります(MaxClients)。この場合、MinSpareServersとMaxSpareServersは機能しません。サーバープロセスが4000のリクエストを処理した後、サーバープロセスは終了し、代わりに新しいリクエストが作成されます(メモリリークなどを制限するため)

したがって、サーバー上の他のすべてのものが約80MBのメモリを使用し、残りは530MBになると想定されています。これを平均プロセスサイズ(53MB)で割ると、10個のプロセスが得られます。

仮定が少しずれていることをお勧めします。サーバー上で他のもの(MySQLなど)を実行している場合は、より多くのメモリを予約しておく必要があります。さらに、変動を考慮に入れる余地はありません。見積もりの​​ために、オペレーティングシステムとその他のサービス用に少なくとも120MBを残し、残りを変動用に10%削減します。したがって、最大約8つのApacheプロセス。

<IfModule prefork.c>
 StartServers       2
 MinSpareServers    1
 MaxSpareServers   3
 MaxClients       8
 MaxRequestsPerChild  1000
</IfModule>

したがって、上記の場合、最大8つのプロセスがあります。開始は2つだけです。常に少なくとも1つのアイドル状態が必要ですが、アイドル状態は3つ以下です。また、メモリが問題になるため、MaxRequestsPerChildが削減されました。

ここで、実際にサーバーを少し実行してから、Apacheを停止し、システムの残りの部分が使用しているメモリの量を確認して、数値を計算することを好みます。合計からその数を引き、90%を取り、平均Apacheプロセスサイズで割ります。特により複雑なセットアップの場合、これにより、より現実的な値が得られます。

言及のポイントとして、メモリに制約のあるボックスでは、WebサーバーとしてApacheよりもNginxの方が適している可能性があります。また、t1.microにスワップスペースが必要なことは間違いありません(ただし、あまり使用しないでください)。

5
cyberx86

MinSpareServersをMaxSpareServersと同じ値に設定しても、あまり意味がありません。需要管理のヒステリシスをサポートするという目的に反します。

参照している投稿に「チューニングApache」セクションがありません。私が見ることができるものは、作者がWebサーバーのフットプリントをどのように測定したかについての説明を提供していないようです。 この質問と回答 を参照してください。

5のkeepAliveTimeoutは途方もなく高いようです-そしてそれについても説明は提供されていません。

MaxKeepAliveRequestsを「MaxClientsの約3分の2」に設定する背後にあるロジックがわかりません

平均53Mbプロセス(私にはかなり大きいように見えます)と613Mbの空きメモリを想定すると、次のようなものから始めます。

keepAliveTimeout 1
maxKeepAliveRequests 15

<IfModule prefork.c>
   StartServers       5
   MinSpareServers    2
   MaxSpareServers    4
   MaxClients        10
   MaxRequestsPerChild  4000
</IfModule>

ただし、各ページから参照される静的ファイルが多数ある場合は、より多くのサーバーを強制的に実行することをお勧めします。

1000のmaxrequestsperchild設定はおそらくOKです。

1
symcbean