その1apacheがよく応答無しになるので調べてみました -その1(コマンド)-の続き。
apacheがメモリを消費しすぎ、応答が異常に遅くなることがあるのでapacheやPHPの設定ファイルを見直しました。試したのはさくらのVPS512(メモリ:512MB)です。
apacheの設定ファイル
/etc/httpd/conf/httpd.conf。CentOSのapacheはmpm_prefork。デフォルトの設定は以下の通り。
<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule>
これを検索した記事やapacheのマニュアルを読みつつ、値を変えて様子を見るという試行錯誤を繰り返しました。落ちる、というかapacheがメモリを異常に消費することがなくなった現在の設定。
<IfModule prefork.c> StartServers 8 MinSpareServers 8 MaxSpareServers 8 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 4000 MaxMemFree 1024 </IfModule>
Serverlimit,MaxClients,MaxrequestsperChildという値をマニュアルを見ながら増やしたり減らしたりして様子を見ましたが、メモリを異常に消費することはなくなりませんでした。
試したことをざっと書くと
・StartServers,MinSpareServers,MaxSpareServersの値を小さくする:メモリを消費しすぎる現象変わらず
・ServerLimitとMaxClientsの値を256→40と小さな値にする:メモリを消費しすぎる現象変わらず
・MaxRequestsPerChildの値を4000→400と小さな値にする:メモリを消費しすぎる現象変わらず
私の場合はMaxMemFreeという項目に値(1024)を設定すると、apacheがメモリを消費して応答なしになる、ということがなくなりました。他の項目の値の大小は、あまり影響がなかったです。
MaxMemFreeという項目はさくらVPSで一日6万PVを処理するためにしたこと – 新卒インフラエンジニア2年目さんのブログで見たのですが、どうもapacheのメモリリークを防ぐようです。アクセス数がそんなにあるブログでもないので、メモリリークを起こしていたのかも。
apacheの設定、奥が深いですね。メモリがたくさんあるサーバなら良いですが、VPSの512Mというのはけっこうシビアなのでそれで扱うには力量がいる気がします。共有サーバならこういう設定がなくてもいいけど、VPSの場合は1つの同じサーバでも設定によっては10の性能しかでないし、200の性能が出ることもある。VPSが難しいというか、ちょっと共有サーバとは違う感じが理解できた気がします。
—-参考記事
●apacheのマニュアル
mpm_common – Apache HTTP サーバ
prefork – Apache HTTP サーバ
●設定が書かれていたブログ
さくらのVPS、引き続きApacheチューニング – Hinemosu
コメント
[…] http://havelog.ayumusato.com/develop/server/e122-apache-prefork-tuning.html http://www.limemo.net/blog/2012/02/no-response-on-apache-2.html […]
[…] http://www.limemo.net/blog/2012/02/no-response-on-apache-2.html […]