さくらのVPS、引き続きApacheチューニング
昨日はApacheの「Out of memory」エラー対策として apache2.conf の設定を変えました。
しかしMaxClientsを下げすぎたようで、アクセスピーク時にCPUのロードアベレージが下がらない状態になってしまいました。
仕方なくtopコマンドで状態を監視しつつ、MaxClientsを少しずつ変更し、120まで上げたところで一段落。
そんな流れを踏まえ、現在の “/etc/apache2/apache2.conf" には以下の変更を加えています。
MaxKeepAliveRequests 50 KeepAliveTimeout 5 <ifmodule mpm_prefork_module> StartServers 8 MinSpareServers 8 MaxSpareServers 8 MaxClients 100 MaxRequestsPerChild 4000 </ifmodule>
基本ポリシーとしては「遅くても良いから省メモリー」です。以下、変更内容の覚え書きです。
MaxKeepAliveRequests
“MaxKeepAliveRequests"は、KeepAliveを続けるリクエストの最大数だそうです。日本語で言い換えると「1ページを一度で読み込む為に必要なリクエスト数」と言うことらしいです。
初期値は100ですが、テキストメインの当ブログは少な目で良いだろうという判断で50まで下げてみました。
KeepAliveTimeout
“KeepAliveTimeout"は、KeepAliveを続ける秒数です。初期値は15秒ですが、思い切って5秒まで小さくしてみました。
StartServers, MinSpareServers, MaxSpareServers
StartServers, MinSpareServers, MaxSpareServersは待機プロセスの数を決定するそうです。
TOPで観察したところ、これがメモリ残量に大きく係わっているようだと分かりました。
Start, Min, Maxを揃えてオーバーヘッドを無くしつつ、上限を8に絞ることでメモリの空き容量を増やしました。
StartServers, MinSpareServers, MaxSpareServers
MaxClientsは昨晩のピーク時に暫定対策として120まで上げましたが、またちょっと下げて100にしてみました。
これも個々のプロセスのメモリ使用量に係わる値のようなので、省メモリサーバでは低めにした方が良いようです。
MaxRequestsPerChild
MaxRequestsPerChildは「個々の子サーバプロセスが扱うことのできるリクエストの制限数」だそうです。初期値は '0’ で制限されません。
TOPで観察したところ、動いてないけどメモリを食ってるプロセスが見えたので、ある程度行ったら再生成されるよう制限を設けてみました。
これで不正なメモリリークの予防と、積極的なメモリ解放が行われることを狙っています。
ディスカッション