サーバはこのブログとは無関係の某所某サイトのもの。
1. Apacheの設定を変更した
preforkで動いているApacheの設定を変更した。アイドルプロセスを減らすために、MinSpareServers/MaxSpareServersの値を小さくする一方で、MaxClientsを大きくして同時リクエスト数を増やした。MaxClientsの設定に当たっては、abコマンド(Apache Bench)で実験しながら決定。お前、本番環境でApache Benchなんか動かすなよバカ!という話なんだけどここ3日くらいそんなことも許されるような状況(つまりデフォルトで激重)だったので決行した。
現在の設定はこんな感じ。
StartServers 5 ← 変更前:8
MinSpareServers 3 ← 変更前:5
MaxSpareServers 10 ← 変更前:20
ServerLimit 384 ← 変更前:256
MaxClients 384 ← 変更前:256
MaxRequestsPerChild 4000
総メモリは9GB、httpdプロセスの消費メモリ平均は20M(topコマンドのRES – SHRで確認)なので、限界まで使われても…多分大丈夫。なはず。
384 * 20 = 7680 < 9216
2. PHPのメモリ割り当てを変更した
いくらメモリに余裕あってもさすがにそんなに割り当てる必要はないだろJK…ということで減らした。(→ 追記あり)memory_limit = 32M ← 変更前:256M
3. スリープ(D)になってたプロセスをKILLした
一番意味がわからなかったのは、Clam Antivirusのclamscanプロセス。cron.dailyで動いてるはずなのに、直近5日間のプロセスが丸々残ってて、「割り込み不可のスリープ状態」になってた。どういうことなの…(→ 追記あり)1%くらいだけどメモリも消費してたし、メールなどのウィルスチェックは別途calmdが起動してて、clamscanはデータの更新?だけっぽいので思い切ってKILL。
以上の変更を行った結果、Load Averageが40Overだったのが4前後に改善した。
そんなことがあっていいのか…
むしろなんかすげー不安なんだけど(苦笑)
参考
@IT:Apacheパフォーマンス・チューニングのポイント(2/2)同時接続数(MaxClients)をいくつに設定すべきか? – Shoulder.jp
apacheのMaxClientsの適正値調べた – うまい棒blog