WordPress 2.6.x 高速化する、2つの大原則
11月 19th, 2008 at 0:55
WordPress を使い始めてから、Apache が固まる事象が多くでてるのです。このblogだけ停止する程度ならいいんですけど、他にも使っているユーザーもいるので、とても困るのです。
エラーとしては MaxClients までいってるぜ親分、的なエラーなのでMaxClients をあげるものの、際限なくリソースを使っていくんです。したがって、MaxClientsをあげればあげるほど、サーバ自体のリソースが無くなって、一度は OSまで落とされました。MaxClients=150 程度で落ちるなんてどないやねん。
ちなみに、我が家は Debian etch+PHP5 を選択しているため、困ったことに、Apache2 の mpm-prefork (Multi Process) しか使えないので、MaxClients をあげるとあげた分だけ 10M弱 Memory が取られていってるわけです。せめて、Multi Thread なら、とか考えたこともありましたが、これも我が道と考え、対応策を考えました。
[原因]
- WordPress にしてから落ちるようになった
- WordPress と MySQLの組み合わせをチューニングしていないからではないか
ということで、全部、WordPress の所為にしました。
[考慮点]
WordPress はすべてのページが phpで構成される動的コンテンツのみです。以前使用していた Serene Bach は、動的コンテンツは検索ページとか一部のみで、基本は静的コンテンツに変換されています。
「これだ」と思いましたね。
いろいろ探しましたけど、そんなことはできないんですけどね。
ということで、WordPress の最適化・高速化を実施することで、リソースが無駄に使われなくなって良いのではないかと、いくつか対策を練りました。
[高速化]
- MySQL クエリキャッシュ
一つ目の高速化の原則は、MySQL のキャッシュを利用しましょう。です。WordPress では、いちいち MySQL に問い合わせをかけるため、topページであろうが毎度毎度 SELECT SQLが実行されてるようです。
ということは、これらがキャッシュされれば MySQL の overhead は相当軽減されます。 - WordPress コンテンツキャッシュ
次は WordPress が出力するコンテンツのキャッシュです。静的コンテンツの解決策に近いものですが、更新状況を見ながら、キャッシュタイミングを見てくれるようにするのがポイントです。これも、PHP で実行される部分を極力減らして、リソース消費を押さえ、かつクライアントでの表示自体も高速化されるわけです。
ただ、コンテンツや widget によっては、キャッシュが効き過ぎて、動的に更新されない場合もあるので、使い分けは検討が必要です
他にも PHPのアクセラレート、Apache の最適化などありますが、Debian etch では面倒なので、この 2つだけで様子を見ることにしました。
[実施手順]
11月 21st, 2008 at 07:18
はじめまして!グーグルさんの紹介でやってきました(笑)
記事を参考させていただきに、オブジェクトキャッシュを導入しました(^ω^)かなりの効果があって、大満足です(笑)
自分も記事を書いたのですが、もしかするとピンバックが何回も飛んでるかもしれません(汗)飛んでたらすみません。。
今後も拝見させていただきますね!
11月 21st, 2008 at 08:16
はじめまして!
コメントありがとうございます
我が家でも、ひじょうに効果の高いものだったので「これは!」と思い、あわててblog書きましたw
WP2.7 もおもしろそうですね^^
1月 4th, 2009 at 11:59
[...] 以前、”Wordpress 2.6.x 高速化する、2つの大原則” で、Wordpress 自身を高速化する方法を載せましたが、Object-Caching の機能が 2.7.x では怪しいことと、根本的な解決策ではないと考えていました。 根本的な解決策としては、”WordPress を高速化する5つの方法” にもあるとおり、「PHPの高速化」を利用することで、Wordpress のバージョンそのものに影響されない速度の改善が見込まれると考えられます。 [...]