ちょいと前の話なんですけどwebmin入れたんです。
cronとかバーチャホストとか、設定面倒臭いって思って。
なら、VPS使う必要あんの?って話になるんですけど、
やっぱパッケージとか入れやすいし、自分の好きなソフト入れて
サーバー動かせるのはやっぱ楽しいので、必要なんです・・・が
あんましfreeとか使ってなかったので気がつかなかったんですけど、
2G限界なのに大体1.8Gとか行ってて、swapもちょっと使ってて
なんじゃこれーってなったので、設定見直しました。
INDEX
MPMってなに
MPMはマルチプロセッシングモジュールって言うのですが、
これにはいくつか種類があります。
一般的に使われてるモジュールが
preforkってのとworkerというやつらしいです。
この他にもwindows用のモジュールとか、apache2.4でデフォルトのモジュールとか、
よくわかんないOSのモジュールがあります。
なので多分今のトコpreforkかworker使うんだと思います。
でもこれからevent使ってく流れになるんだと思います。eventはworkerの上位互換です。
preforkモジュールは安定する代わりに、プロセスでマルチタスク制御するので重くなりがちですが、
workerモジュールは予めプロセスを立ち上げておいてマルチタスク制御するので動作が軽くなるみたいです。
ただこの辺はブログで読んだ知識なので、いつか本で補完したいと思います。
ちなみにCentOSでは、preforkが最初から設定されています。
PHP実行環境ではpreforkを使うのが望ましいみたいです。
プロセスっていうのは実行中のプログラムで
マルチタスクっていうのは沢山居る客を捌く仕組みです。
凄まじく乱暴な説明なので、時間ある人はリンク先見てください。
動作パラメータの設定(prefork)
今回のこのメモリが以上に食われる問題は
この設定のせいでした。
httpd.conf内 <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule>
色んなサイトを見ながら、このパラメータを自己解釈してみました。
StartServers
起動時に立ち上がる子サーバープロセスの数です
起動する子サーバープロセスの数は負荷により増減するので
あんまし気にしなくて良いみたいです。
MinSpareServers
これはなんもしてない子サーバープロセス数の最小値です。
この設定値よりも子サーバープロセスが少なくなった場合
親プロセスが子サーバープロセスを増やしてきます。
MaxSpareServers
なんもしてない子サーバーのプロセス数の最大値です。
これよりも子サーバープロセスの数が多くなった場合
親プロセスがこのプロセスをkillしにきます。
MaxClients
リクエストに応答する為の子プロセスを作れる上限値
ServerLimit
preforkの場合は「同時クライアント数 = サーバプロセス数」になるので
MaxClientとおんなじにしておきます。
MaxRequestsPerChild
親プロセスが子プロセスをフォークするまでのリクエスト数です。
リクエスト数が設定した値になるとフォークを始めます。
とゆうわけでこうしました。
httpd.conf内 <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 10 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 1024 </IfModule>
とりあえずこれで安定して動いてるので、
暫くこれで様子見てみようと思います。