WordPressを動かすとApacheがメモリを食いつぶす

WordPressを入れていろいろ設定をしていたら、だんだん応答が遅くなってきました。

作業用ssh端末のほうもコマンドの反応が悪くなってきたので、topコマンドで調べてみました。

Shift+Mでメモリ使用量順に並べてみると、Apacheのプロセスhttpdが上位にずらっと。

5つあるhttpdのうち4つがそれぞれ約400MBほど消費し、2GBある実メモリが使い切られてしまっています。

 

再現は簡単で、キャッシュプラグインW3TCの設定セーブを繰り返すだけです。

メモリをじゃぶじゃぶ消費していく様子が分かります。

入れていたプラグインの中で重そうなのを選んでみましたが、別のプラグインでも似たようなことになるのかもしれません。

 

とにかくこんなにメモリを食いつぶされていたら使えない、ということでいろいろ調べてみました。

どうやらWordPressとは基本的にメモリを大量に使うものらしいです。プラグインを大量に入れると大変なことになることもあるとか。

大量のメモリをロックしたプロセスが居座らないよう、Apacheのconf/extra/httpd-mpm.confでMaxRequestsPerChildを設定してみたのですが、どうも効果がないようで。

 

仕方がないのでApacheのMPMをworkerからpreforkに変更することにしました。

ソースからコンパイルしたApacheを使っていますので、configureからやり直します。

変更点:–with-mpm=worker →  –with-mpm=prefork

 

これで例の設定セーブを繰り返しても、実メモリの消費が600MBほどで止まるようになりました。

起動するプロセス数を調整すればもっと減らせそうです。

次の問題は、workerからpreforkにしたことでパフォーマンスへの影響がどれぐらいあるかですね。

PHPを使うならpreforkがいいという話もありますし、影響がないことを期待したいです。