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

Apache,WordPress,さくらのVPS

Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集

興味のないヒトにはくどいでしょうが、本日も「さくらのVPS|VPS(仮想専用サーバ)はさくらインターネット」にUbuntuでLAMP環境を構築し、その上でWordPressを動かすオハナシです。

なかなか安定運用に持って行けてませんが、http無応答時にコンソールを覗くと、Apacheさんが「Out of memory」を吐きまくっていることに気がつきました。

Out of memoryについて

まず「Out of memory」に付いて調べました。

linuxの初期設定では総メモリ容量(実メモリ+Swap)以上の実効メモリ容量を要求された場合、実際には足りないのに大らかな気持ちで要求を受入れてしまうそうです。

結果として必要なメモリが足りない事態が発生した場合、適当なプロセスをkillしてしまうそうで、これを行うのが「Out Of Memory Killer」ことOOM Killerさんのお仕事で、OOM Killerさんが吐くエラーが「Out of memory」として表示されていたようです。

OOM Killer概要:
Out Of Memory Killerのこと。Linuxのデフォルトの動作では、プロセスがメモリを要求した場合、総メモリ使用量が実メモリ+swap以上であっても、ある程度許可するようになっている。これは、各プロセスが要求したメモリをすべて使うわけではないという経験的な法則により、できるだけ多くのプロセスを起動するためにそのように動作になっているようである。そのため、あるプロセスが確保できたはずのメモリを使おうとし、実際にメモリが足りない場合カーネルが適当なプロセスを選択し、そのプロセスをkillしてしまうことをOut Of Memory Killerという。

引用元:http://yochecks.blogspot.com/2007/04/oom-killer.html

Apacheのチューニング

OOMエラーを理解することにより、Apacheの「なにか」がメモリを浪費しているのでは無いか?というアタリを付けました。

なぜApacheさんがメモリを食いまくっているか?と言う根本的な理由は分からないですが、取りあえずの対策としてApacheの設定をチューニング。

/etc/apache2/apache2.confを開き、mpm_prefork_moduleの設定を以下のように変更しました。

<ifmodule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients           34
    MaxRequestsPerChild  4000
</ifmodule>

一番大きく変更したのは「MaxClients」の値です。初期値では150になっていましたが、省メモリ環境での運用であることを踏まえ、34に制限してみました。これで良い変化があると良いんだけどな~。

Apacheのチューニングに付いては、『さくらのVPSのその後@2010-10-25 | それでも地球はまわっている』や、『[Slicehost] OOM Killer(Out Of Memory Killer)の対策 – delab』を参考にしています。貴重な情報ありがとうございます。