【Apache】メモリの消費量改善

atamaitaiちょいと前の話なんですけどwebmin入れたんです。
cronとかバーチャホストとか、設定面倒臭いって思って。
なら、VPS使う必要あんの?って話になるんですけど、
やっぱパッケージとか入れやすいし、自分の好きなソフト入れて
サーバー動かせるのはやっぱ楽しいので、必要なんです・・・が
あんましfreeとか使ってなかったので気がつかなかったんですけど、
2G限界なのに大体1.8Gとか行ってて、swapもちょっと使ってて
なんじゃこれーってなったので、設定見直しました。

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>

とりあえずこれで安定して動いてるので、
暫くこれで様子見てみようと思います。

スポンサーリンク

この記事が気に入ったら
フォローしよう

最新情報をお届けします

おすすめの記事