ざっくりまとめ
どうやらワードプレスの投稿やシステムのコア更新でPHP memory_limit が32MBでは厳しくて128MBが必要という事例があるが、本当にそんなに使うのだろうか? そんな他のブログを見かけて、いちがいに信じられないので、調べてみることにしました。
メモリーをドカ食いしていることになるが?
普通に16Mの割り当てでも投稿できたり問題なくシステム更新できたりしている。64Mならばけっこう贅沢な環境。しかし128Mまで開いてしまえば、マジキチgoogleやタコ坊主MSNボットがラッシュしてくれたら、あっという間にギガ消費になる
普通、apacheはmax_client最大接続数として、いまどきのレンタルサーバなら標準値で250数くらいになってることも珍しくない。
では、クライアント接続数を絞ればいいのか?
そんなことをすれば、keep_aliveでタイム遅延しまくる「先生と呼ばれるハレンチBOT野郎」のgoogleやMSNにつかまれば、サーバーダウンないし、加熱防止のため処理クロックダウンされてしまう。
結果、余計に処理が鈍くなり、タイムアウトのラッシュになる。
その結果、ハレンチBOT(いわゆる先生と呼ばれるヘンタイさんたち)からは、ページランクやSEO評価が劇的に「重いサイト=最低ランク」としてみなされる。
やはりApacheの接続数を減らすのは微妙な話になる。人間で言えば、キーボードが多すぎるからといって、訓練や調整をしないで、指を10本から4本に切り取ってしまうようなものだ。
それは管理者からは理解しやすくなって、扱いやすくなるかもしれないが、余計に処理は効率悪くなってしまう。
結局、他のCMSやブログツールやホームページ自動作成ツール、またPIVOXと比べて、これらは8M~16Mで余裕で確実に動き、memory faultしないが、ワードプレスだけが「ドカ食い」するのだろうか?
debugで追いかける
結論がでた。これはプラグインに影響されている。データベースにプラグイン専用のテーブルが作られて、それらにインデックスが貼られていなかったり、プラグイン自体が無限ループやメモリーリークに近い「多段変数」などがみられるプラグインがかなり存在する。
ざっくり、すべてのプラグインを削除。もちろん、SQLからもプラグインのテーブルを手動でこまかくテーブルだけdelete。使うテーブルは残しつつ。
おお、ワードプレスに、configやhtaccessでmemory_limit 64Mとか256Mとか設定しなくても、普通にPHP memory_limit 16Mのまま、コアの更新や投稿がきびきび出来るではないか!
なんてことはない、プラグインがメモリリークしていたのね。
だから、同じ設定でも、apacheのchildプロセスを1000から50くらいに絞った環境の人は、256Mを割り当てても問題なく動いてみたり(つまりチャイルドプロセスが50アクセスでメモリーを初期化してくれるから)、サーバーが詰まらない。
しかし、それでは、当然ながらオーバーヘッドばかりになるから、重くって仕方ないドンクサいワードプレスになってしまい、SEOが劇的超落下するため、読者に恵まれなくなる。(childをさげてメモリーを確保できたものの、SEOが劇落してしまった体験談は語る・・・・)
やはりそれなりにchildプロセスの存命を残して応答性は高め、スクリプトでメモリーリークが生じないように、しっかりデバッグで監視していくことが大事だろう。中にはワードプレスは「テーマ外観」にもPHPが多数仕込まれており、smartyの無限ループなどの問題で、テーマで自爆してしまうこともある。
テーマとプラグイン選びが重要ということだ。
見た目や機能だけカンで選んで、利用者のレポートを鵜呑みに信じると、自分のサーバーではトンでもない悲劇が待ち受けている・・・・メモリーを闇雲に増やせば、当然、サーバー負荷が激増し、最悪の場合、サーバーが落ちることは必至だ。
64MBならまだあり得る範囲かもしれないが、中には余裕を見てPHPに128MBを充てている記事も見られる・・・
max_client 250 として、メモリ割り当てmemory_limit 128Mにしていたとしたら
250 x 128M = 32000M つまり32GB
よっぽど月額5万円の専用サーバーでも、せいぜいメモリー積載は128GBがいいところ。さしずめ20サイトくらいが同居しているので、1契約者に対するメモリーしきい値は6GB~8GBがいいところ。
そんな超ゴージャスな専用サーバーでも、8GBくらいしか使えないのだし、あしまわりの回線でもしぼられていたんじゃ、話にならないわけで・・・
そんな中、ワードプレスだけのために32GBも消費するようなメモリーの設定は、ちょっと考えられないを超えて、BOT様どうぞ評価を低くしてくださいまし、そして私のサーバーを落としてくださいませ、と言っているようなものであろう。
それで更にmax_client数を減らすなら、もうインターネット辞めますか?という話になるわけで、分散サーバーというより、まず、そんな16MBだってかなり広いメモリ空間なのだから、どこでワードプレスが64Mでも厳しいようなメモリーのドカ食いをしているのか、きっちりバグチェックすることが大事。
けっきょく、128Mでもmemory errorするワードプレスは、追加プラグインなどに深刻な問題があって、回帰エラーやハッキングソースによってメモリーが異常に消費されているだけの話でした。
よっぽど割り当てて64MB、普通に使うのであれば16~32M、バグチェックで回帰エラーなどでは128Mで非公開で様子見といったところ。動画配信サービスなどでは、ストリーム変換のためにコミュネスでは1トランザクションに対してPHPのメモリー配分として1コネクトにつき800MBを充てているそうです。なるほど、高画質なわけですね。(20台以上の連装マルチサーバー/Apacheだけで20TBの搭載メモリーとのこと)
コミュネス・インターネット講座 代理店コスモスの講習会で、ワードプレスについて勉強してきました。
コミュネス・無料レンタルワードプレス&講習会セミナー
http://communes.jp/help/content.php?lid=45