Apache の prefork 設定をみなおす
レンタルサーバーに SliceHost の 256MB のやつを使っているのだけど、いつのまにかほんともう実用に耐えられないデスというほどに重くなっていた。
mongrel 立ち上げてもほぼタイムアウト、WordPress ですら 1p アクセスに 1 分超えるという恐ろしさ。
どこを見ても SliceHost は褒められていて重いと言っているのは私だけか、とふと top コマンドで M (メモリ食っているもの順に表示) してみたら恐ろしいことに…!
%MEM COMMAND 13.1 httpd 8.9 httpd 8.7 httpd 8.6 httpd 6.6 httpd 6.2 httpd 6 httpd 5.8 httpd 4.3 httpd 4.2 httpd 4.1 httpd 3.8 httpd 2.6 httpd 2.6 httpd 2.4 httpd 2.4 httpd 2.3 httpd 2.3 svn 2.2 httpd 1.2 ntpd 1.8 mysqld 1.3 httpd 1.2 sshd 0.6 sshd
ぎゃぼー、なんだこの Apache たちは。デフォルトでそのまま入れていたのがいけなかったもよう。そりゃスワップもするよ。
人に聞くと prefork か worker とやらの値を小さくしたらとのこと。httpd -l として prefork.c があれば prefork モード、worker.c があれば worker モードらしい。
Compiled in modules: core.c prefork.c http_core.c mod_so.c
だったので prefork ってところを直せばいいみたい。
よく分からないなりに httpd.conf の prefork あたりを適当に修正。
StartServers 5 → 前は 8 MinSpareServers 3 → 前は 5 MaxSpareServers 10 → 前は 20 ServerLimit 50 → 前は 256 MaxClients 50 → 前は 256 MaxRequestsPerChild 4000 → 多いほうがいい?そのまま
KeepAlive も Off だったので On にしてみる。
%MEM COMMAND 19.7 mongrel_rails 19.7 mongrel_rails 8.3 httpd 8.3 httpd 7.9 httpd 3.7 httpd 1.9 mysqld 1.9 ntpd 1.2 httpd 0.6 httpd 0.6 httpd 0.6 bash 0.6 sshd 0.6 sshd 0.5 sshd 0.5 top 0.5 bash 0.5 su 0.4 rotatelogs 0.4 master 0.4 pickup 0.4 sshd 0.4 top 0.4 qmgr 0.3 sshd 0.3 rotatelogs 0.3 rotatelogs 0.3 rotatelogs 0.3 rotatelogs 0.2 su 0.2 su 0.2 su 0.2 su 0.2 bash
だいぶましになった…!?たぶん…。きっと…。