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

だいぶましになった…!?たぶん…。きっと…。