以下の例は、MaxClientsが256のときと、20のときで、どのように挙動が変わるかをabで図ったものです。
# ab -c 100 -n 2000 http://49.212.??.??/phpmyadmin/MaxClientsが256の場合は、スワップを大きく消費しているほか、ロードアベレージも大きく上がっており、SSHのレスポンスについても非常に悪化していました。
それに対し20の場合は、それほど負荷の上昇は見られず、計測時間、秒間処理数、リクエストにかかる秒数の全てにおいて、改善していることが分かります。
要は、無理に同時に処理する数を増やすより、少々待たされる状態が出たとしてもサーバ能力を超えない範囲にしたほうが、結果としてレスポンスは良くなるということです。
サーバ負荷が高く、レスポンスが悪化した場合は、MaxClientsを増やすのではなく、減らすことをまず考えた方が賢明です。
MaxClients スワップ ロードアベレージ 計測時間 秒間処理数 リクエスト 256 859MB 79.26 55.40秒 36.10/秒 2.73秒 20 11MB 5.46 35.66秒 56.08/秒 1.74秒
1サーバあたりのメモリ使用量(ps結果のRSS)は10MB程度でしたので、100サーバだと1GB程度消費するのに対し、20サーバだと200MB程度で済みます。結局のところ、Apacheで使用する容量÷10MB?30MB程度で考えるのが良いでしょう。参考までに、私が1GBメモリ、2コア程度のサーバ(さくらのVPS 1Gプラン相当)でいつも行っている設定は以下のような値です。
<IfModule prefork.c>
StartServers 10
MinSpareServers 5
MaxSpareServers 15
ServerLimit 256
MaxClients 40
MaxRequestsPerChild 1000
</IfModule>
ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編) - さくらインターネット創業日記
* StartServers
Apache開始時に立ち上げておくべきサーバ数。
* Apache起動直後は、ここで指定した数のサーバが立ち上がる。 MinSpareServers
アイドル中のサーバ数の下限。アイドル中とは、リクエストに対して即座に対応できる状態(つまり処理していない)のこと。
ここで指定したサーバより少なくなった場合は、新たなサーバを立ち上げる。
* この数値が小さすぎると、急激にアクセスが増えたときに、リクエストに受けきれなくなる。 MaxSpareServers
アイドル中のサーバ数の上限。
ここで指定したサーバより多くなった場合は、余計なサーバを終了させる。
* この数字が大きすぎると、アクセスが落ち着いている状態でもサーバが終了されず、メモリが無駄に消費されることになる。 ServerLimit
後述するMaxClientsに指定できる数字の上限を指定する。
* MaxClientsを256より大きな数字にするとき以外は、特に変更の必要はない。 MaxClients
サーバ数の上限。
* ここで指定した数以上のサーバは立ち上がらない。 MaxRequestsPerChild
処理できるリクエストの上限数。
処理したリクエストがここで指定した数を超えると、該当サーバは終了される。
