Apacheサーバチューニング

3月 30th, 2007 by tsuyoshi Leave a reply »

先日導入したmuninによれば、我が家のサーバはどうもメモリが逼迫気味である。
原因はと探っていくと、どうやらApacheがphpと一緒になってメモリを使いまくっているようである。ps -aux で見てやるとRSS/実アサインサイズが30Mバイトとかのhttpdプロセスが15個ぐらいある。30×15=450M。むむむ。512Mのサーバにしては結構な数字である。

それでは、ということでまずはhttpd.confでLoadModuleディレクティブを変更する。
ひとつづつコメントアウトしながらhttpdをリブートしていって、ミニマムセットを割り出す。
これで、起動時のhttpdサイズが6M程度になる。
続いて、起動するプロセス数のセッティングを変更する。具体的には以下のとおり。

StartServers 5
MinSpareServers 2
MaxSpareServers 4
ServerLimit 15
MaxClients 15
MaxRequestsPerChild 10

「最初に起動するサーバプロセスは5個で、予備にとっとくのは2個。予備は4個まで増やしても良い。でも、全部で15プロセスまで増やして良いけど、プロセスが10個リクエスト処理したら捨てて、新しいのを起動する。」という設定。
MaxRequestsPerChild を極端に少なくしてあげることで、プロセスが再起動するインターバルが短くなり、抱え込んだメモリをこまめに吐き出させることになる。

次にphp.iniで最大メモリーサイズを8Mに落とす。
これがどう効くのか実はよく理解していない。httpdのプロセスがあって、ここで動いたphpはキャッシュされていくんだろうから、単体でのメモリーサイズがどうだろうと実はそんなに関係ない。溜まっていく単位が違うだけで、溜まる総量は変わらんから。
こういう解釈が正しいのかすらも分かっていないが、とにかくメモリーサイズと書いてあるからには、落とす。

以上のセッティングで、httpdのサイズは20M以下を維持するようになったようだ。
しばらくまわして、空きメモリが常に確保できているような状態にしておきたい。でないと、アクセスアップなんぞおっかなくてできん。

Advertisement

コメントをどうぞ