概要
Web Serverのレスポンスが時間が経つにつれて遅くなる現象に見舞われていた。
でもhttpdをリスタートすると、また早くなる。
そこでmuninをインストールしサーバの状態を監視してみることにした。
その結果、時間経過とともに、iowaitが増え、さらにswapも増えていることが分かった。
レスポンスが遅くなった原因は、おそらく使用メモリが増え続けて、メモリリークのような状態になっていたことだろう。。。
ってことで、apacheの設定をいじって、改善したことをメモ。
MPM(Multi Procesing Module)
- リクエストの処理部分。
- preforce, workerなどがある
- PHPを使うならpreforceがいいとのこと
httpd.confの設定
/etc/httpd/conf/httpd.conf
MPMのpreforkの設定に
MaxRequestsPerChild
がある。
これは、子プロセスが扱うリクエスト数の制限数を設定する。
設定した値までプロセスが存在し続けるようだ。
したがって、メモリの割に大きな値を設定してしまうと、swapの領域までメモリを食い続けてしまうってことらしい。
そこで、この値を少なくすることにした。
とりあえず4000に設定されていたものを1000に変更すると、
swapの領域がかなり減った!!
200とか100に設定している人もいたので、様子を見ながら変更しようと思う。
PHPで作る携帯サイトデベロッパーズガイドを参考に、以下のツールもインストールして速度を向上させた。
Alternative PHP Cache
- APCと略される
- PHPのextension
- 実行コードをキャッシュしてくれる
インストール等は書籍を参考に。。。
これらの設定で、ロード時間も今まで、
最小1秒
だったのが、
最小0.5秒
ぐらいにまで減った。
もっと早くに対策をするべきだった。。。