さくらのVPS、引き続きApacheチューニング

Apache,さくらの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で観察したところ、動いてないけどメモリを食ってるプロセスが見えたので、ある程度行ったら再生成されるよう制限を設けてみました。

これで不正なメモリリークの予防と、積極的なメモリ解放が行われることを狙っています。