私は現在、Apache2のサーバがで実行しているmpm-prefork
とmod_php
512Mリアル/ 1024Mバースト可能RAMとOpenVZのVPS(無スワップ)に。いくつかのテストを実行した後、Apacheが取得する最大プロセスサイズは23MであることがわかりましたのでMaxClients
、25に設定しました(23M x 25 = 575 MB、大丈夫です)。私は自分のサーバーでいくつかの負荷テストを実行することに決めました、そして結果は私を困惑させました。
私が使用しているab
WordPressのブログからメインページを要求し、私のデスクトップマシン上で。
ab
24の同時接続で実行すると、すべてが正常に見えます。確かに、CPUは上がり、空きRAMは下がり、その結果、リクエストごとに約2〜3秒の応答時間になります。
しかしab
、25の同時接続(サーバー制限)で実行すると、Apacheは数秒後にハングします。リクエストの処理を開始してから応答を停止し、CPUは100%アイドル状態に戻り、ab
タイムアウトします。Apacheログはそれが達しMaxClients
たと言います。
これが発生すると、Apacheは25の実行中のプロセス(サーバーのステータスを確認するとすべて「W」になっています)でロックされたままで、TimeOut
設定が終了するとプロセスが停止し、サーバーが再び応答し始めます(私の場合は設定されています) 〜45)。
私の質問:それは予想される動作ですか?なぜApacheは到達したときに死ぬのMaxClients
ですか?24の接続で動作する場合、25で動作する必要はありません。各リクエストへの応答に残りの時間を要し、残りをキューに入れるだけです。
ab
サーバーへの同時接続を設定するだけで、実行している子供が一人でWebサーバーを停止できるのは、ちょっと奇妙に聞こえますMaxClients
。