私たちは WordPressマルチサイトインスタンスを実行しています 現在2つのRackspace Cloudサーバー、1つのWebと1つのデータベース、現在約30サイトあります。静的資産にはNginxを優先し、Apacheはすべての動的要求を処理します。また、Memcachedをデータベース用に設定し、APCのopコードキャッシュをPHP用に設定しました。 W3 Total Cacheは、すべてのサイトでデフォルトで有効になっています。
1つ問題があるとすぐに厄介です。Apacheのプロセスは、定期的に80から120 MBの間になります。 Webサーバには2 GBのメモリがあります。つまり、問題が発生するまで15個ほどのプロセスがあります。プロセスは明らかにそれほど大きくないはずですが、私はそれらがなぜそうであるかについて困惑しています。
何が起こっているのかを特定するための良い戦略は何ですか?
前もって感謝します!
Update 10/2/10:疑問に思う人のために、メモリ問題の解決策はPHP xdebugを無効にすることでした(誤って設定で有効にされ、ランダムなメモリ使用量の急増を引き起こしました) 。
あなたが話すApacheプロセスのメモリ量(プロセスあたり80から120 MB)は、2つの理由に分けることができます。
Apacheを最適化するには、必要なモジュール数だけをロードし、その他の最適化を調整することでメモリを削減します。まだ最適化していない場合は、いくつか微調整します。
Wordpressは大量のメモリを消費するだけで、まったく最適化されていません。データベースクラスをもっと適切に実装されたものに置き換えることから始めます。これにより、速度が上がり、メモリ使用量が大幅に削減されます。その隣に、私はそれほど示唆するものがありません。 Worpdressを使用しないことは有用とは考えられません。
何が起こっているのかを知るためには、ワードプレスのリクエストがどれだけのメモリを消費しているかを追跡する必要があります。ピークメモリ使用量を監視するために使用できるピーク使用量取得機能( memory_get_peak_usage()
)があります。それがあなたが書いた80 - 120 MBに近づくならば、あなたはwordpressがあなたの頭痛を引き起こしていることを知っています。タイムスタンプ、ピークメモリ、実行時間、および要求されたURIをログに記録することをお勧めします。
Nginxを使用してキャッシュされたワードプレスページを処理すると、ワードプレスのロードが妨げられるため、最も確実に役立ちます。それらはワードプレスのプラグインであるため、概念的には壊れています。そのため、結果がキャッシュされている場合でも、ワードプレスの少なくとも一部をロードする必要があります。
ダニエル、
私はkenkeiterに敬意を表して同意しません。nginxをリバースプロキシとしてApacheの前で使うことを理解しています。ハーバード・ローはこの方法で大成功を収めました、そして彼らは彼らがこれをどのようにするかについての素晴らしい記事を持っています、nginxとのインターフェースを助ける彼らのWordPressプラグインへのリンクで:
http://blogs.law.harvard.edu/djcp/2010/01/nginx-as-a-front-end-proxy-cache-for-wordpress/ /
Harvard Lawで彼らが発見したのは、nginxは基本的にすべてのリクエストをフロントエンドでキャッシュしているので、バックエンドで他のキャッシュタイプのプラグインを使用してもパフォーマンスは実際には向上しないためです。このようにnginxを使用することに真剣なら、私はあなたが彼らの経験についてその記事を見て、WPサイドのキャッシングを含む動的なプロセスを減らすことを試みることを勧めます。
Apacheのアクセスログとエラーログを注意深く調べて実際にどのような種類のクエリが動的に行われる必要があるかを調べるといった基本的な方法がいくつかあり、そのような場合を減らすのも良いスタートかもしれません。
まず第一に、あなたはApacheとNginxを使っています - 冗長です。あなたはNginx/FastCGI w/PHPを使うべきです。このサイトのチュートリアルが役に立ちます。さもなければ、私の最も良い推測はあなたのコードへの最近の変更がメモリを正しく解放しないためにPHPのいくつかのバグを引き起こしていることです。 Apacheプロセスがそれほど多くのメモリを消費するべきであるという理由はありません。
http://interfacelab.com/nginx-php-fpm-apc-awesome/
がんばろう!
@kenkeiter