質問: ■質問背景 自宅の1台のサーバ上で、Apacheにprefork設定を致しました。 MaxClientsを256設定にして、同一サーバ上から、ABベンチソフトにて(abコマンド)を実施したところ、挙動に疑問が出ましたので、質問させてください。 abコマンドで、100多重でかけると、prefork設定をしているので、Apacheのプロセス数が100まで上がるのかと思いましたが、上がりませんでした。 $ ab -n 500 -c 100 http://127.0.0.1/hogehoge.html →確認は以下でしております。 $ while true; do ps -ef | grep httpd | wc -l; sleep 1;done →プロセス数は20〜30を推移いたします。 ■質問内容 以上をもとに、下記2つの質問をさせてください。 1.そもそもpreforkは、1クライアント→Apacheプロセス1が受け持つという認識が間違っているのでしょうか? 2.上記認識は正しいが、100多重といっても、リクエスト時間に微妙なばらつきがありるため、プロセス数が単純に100多重→100プロセスと同時に上がらないのでしょうか? (2つめのリクエストが走るときには、すでに1つめのリクエストが終わってしまっている・・・) ■簡単に構成を記載いたします。 ・実施環境 ・サーバー1台(Apache環境、負荷をかける環境は同一サーバで実施しております。) ・OSバージョン:CentOS7 ・Apacheバージョン:Apache 2.4 ・Apache設定:prefork設定 StartServers 20 MinSpareServers 20 MaxSpareServers 10 MaxClients 256
回答: > > 1.そもそもpreforkは、1クライアント→Apacheプロセス1が受け持つという認識が間違っているのでしょうか? > > > はい。条件つきではありますが、一般的にはその通りかと思います。 > > 2.上記認識は正しいが、100多重といっても、リクエスト時間に微妙なばらつきがありるため、プロセス数が単純に100多重→100プロセスと同時に上がらないのでしょうか? > > > Apacheのプロセス数が上昇するには時間が掛かりますので、 -n 500 -c 100 だと、プロセス数が上昇する以前に ab が終了してしまうと思います。-n は非常に大きな数(たとえば 5000000)を指定して、プロセス数の上昇を観察するのがよいと思います。