@kyanny's blog

My life. Opinions are my own.

StartServers と MinSpareServers

今日、livedoorしたらば掲示板の管理画面がリニューアルしました。少し手伝いました。

で、先週の金曜日の夜に apache の設定を見直しててふと気づいたことがあったのでメモ。

apache には StartServers というディレクティブがあり、これは apache を起動した直後のプロセス数を指定する (prefork の場合)。デフォルトだと 5 とか。だから apachectl restart した直後に ps auwwx | grep httpd とかすると、 apache のプロセス数がすごく少なかったりする。しばらくたつとプロセス数がもっと増えていて 100 を超えてたりする。

apache には MinSpareServers というディレクティブもあり、これは「アイドルなプロセスの数の最小値」を指定する。アイドルなプロセスとは、クライアントからのリクエストを処理していない、リクエストを待っているプロセスのこと。この値もデフォルトだと 5 だったか。

で、この MinSpareServers よりもアイドルなプロセスの数が少ない場合、 apache はアイドルなプロセスが MinSpareServers より大きくなるまで自動的にプロセスを増やすのだけど、これがマニュアルによると「最大で一秒につき一プロセス」というペースなんだそうだ。

ここで仮に、それぞれのディレクティブの値がデフォルト値であるウェブサーバに対して毎秒 50 アクセスあったとする。 apache を再起動すると、 StartServers に従って 5 プロセス起動する。毎秒 10 アクセスなので 5 プロセスでは当然足りないので、多くのクライアントは接続待ちになってしまう。全てのプロセスを使い切ってしまっているから MinSpareServers に従ってプロセスが増えていくが、それも毎秒一プロセスというのんびりしたペースなので、再起動から一分くらい経過しないと十分な数のプロセス数まで増えず、その間ずっとクライアントは待たされつづけ、サイトに繋がりにくくなる。

・・・そういえば、昔クリップのスクリーンショットサーバをリプレースしようとしていたとき、特に再起動後にぜんぜん繋がらなくなることがよくあって、でも MaxClients も ServerLimit も上限ぎりぎりくらいまで増やしてるし、時間がたつと解決しちゃうしで、不思議に思っていたことがあったんだけど、もしかしてこの辺のパラメータを全くチューニングしてなかったせいじゃね?と、思い出したのでした。

apache のチューニングもばっちりな、したらば新管理画面のご利用はこちらからどうぞ! http://cms.jbbs.livedoor.jp/login/email

参考

http://httpd.apache.org/docs/2.2/mod/mpm_common.html#startservers
http://httpd.apache.org/docs/2.2/mod/prefork.html#minspareservers