web-dev-qa-db-ja.com

WordPress MySQL& PHP パフォーマンス

今日40,000-50,000ページビューを取得するウェブサイト(www.americanbankingnews.com)を持っています。現在は8GBのRAMを搭載した専用のクアッドコアXeonサーバーに搭載されています。このサイトはWordPressとMySQL(同じサーバー上にある)を搭載しており、現在私はページとMySQLクエリキャッシングにW3 Total Cacheを使用しています。

残念ながら、それで十分ではないようです。トラフィックのピーク時に、私のサーバーはいくつかのHTTP 500エラーを受け取り、キャッシュされていないページはゆっくりとロードされます。

私は現在Xcacheや他のPHPキャッシュ/アクセラレーションツールを使っていません。

MySQLとPHPのパフォーマンスを最適化するために必要な追加の手順はありますか?または私は追加のサーバーのために引き継ぐべきです。具体的には、MySQLのパフォーマンスを向上させるための追加の提案、およびxcacheのようなツールがこの状況で役立つかどうかに興味があります。

4
Matthew Paulson

こんにちはマシューポールソン、

W3 Total Cacheを使用していますが、データベースとオブジェクトのキャッシュはdiskに設定されています。オブジェクトとデータベースをディスクにキャッシュすると、特にトラフィックが多い場合は、実際にはパフォーマンスに悪影響が出る可能性があります。

データベースとオブジェクトのディスクへのキャッシュへの影響については、W3 Total Cacheの設定の方法で私が書いた記事を読んでください。プラグインの作者が私の設定の指示に同意しました。

データベースとオブジェクトのキャッシュの利点を実際に見るには、APCのようにPHPオペコードキャッシュを使用する必要があります。 APCをコンパイルして設定するには、プラグインFAQのコピーアンドペーストの手順に従ってください。 UbuntuまたはDebianをお使いの場合は、apt-get apc-php5コマンドを実行するだけでインストールできます。

他の人が言ったように、Nginxでリバースプロキシを設定することで、パフォーマンスが飛躍的に向上し、サイトの規模を大幅に拡大できます。

私はそれをどのように設定し設定するかについての詳細な説明を私のWordPress Performance Stack。の記事に書いています。

あなたはまた、ここで他の質問と答えのいくつかを読むべきです。たくさんの良いパフォーマンスとスケーリングのアドバイスが与えられました。

あなたの探求に頑張ってください。あなた自身のサーバを管理することは時々非常にストレスがかかる場合があります。

編集

リバースプロキシとしてNginxをインストールすることで得られるパフォーマンスを示すために、私は自分のサーバーで実行したばかりのApache Benchmarkテストを投稿しています。

x-wing ~: ab -n 1000 -c 80 http://wp-performance.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.Apache.org/

Benchmarking wp-performance.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        nginx/0.8.54
Server Hostname:        wp-performance.com
Server Port:            80

Document Path:          /
Document Length:        3132 bytes

Concurrency Level:      80
Time taken for tests:   0.066 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      3605000 bytes
HTML transferred:       3132000 bytes
Requests per second:    15164.15 [#/sec] (mean)
Time per request:       5.276 [ms] (mean)
Time per request:       0.066 [ms] (mean, across all concurrent requests)
Transfer rate:          53385.52 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2   0.6      1       3
Processing:     1    4   0.8      4       5
Waiting:        1    3   0.8      3       5
Total:          3    5   0.6      5       7

Percentage of the requests served within a certain time (ms)
  50%      5
  66%      5
  75%      6
  80%      6
  90%      6
  95%      6
  98%      6
  99%      6
 100%      7 (longest request)

理論的には、毎秒15,000を超える要求を処理できます。 (同じネットワーク)

5
Chris_O

同様の質問と回答がたくさん: https://wordpress.stackexchange.com/search?q=mysql+optimize

Mysqltunerのようなツールを使用してボトルネックを調査し、エラーやメモリ使用量についてログをチェックしたり、phpのオペコードをキャッシュしたり、ポスト/ページのリビジョンをクリアしてDBのサイズを小さくするなどです。

2
markratledge

こんにちは@ Matthew Paulson:

あなたは間違った質問をしているのかもしれません。

あなたのトラフィックでnginx を使ってフロントエンドキャッシュを見たいかもしれません。このサイトにあるnginxのQ&A、Googleで検索した関連記事、wordpress.orgでWordPressとnginxを連携させることができるプラグイン、そして最後にインストールと設定に関する記事があります。

それでも解決できない場合、または他の理由で実行したくない場合は、どのプラグインを使用しているかをお知らせください。 WordPressのパフォーマンスの問題に関するほとんどの場合は明白ではありませんが、代わりにそれらはいくつかの貧弱に書かれたプラグインの結果です。

1
MikeSchinkel

高負荷の下で、正確にボトルネックになっている点について洞察がありますか?それは異なったタイプのリソースであるかもしれません(CPU負荷、持続的なネットワーク接続、メモリ不足など)。

一般的なこと

  • オペコードキャッシュ(コンパイルされたPHPコードをメモリに保持する)は必須です。
  • メモリを消費するように思われるので、メモリベースのオブジェクトキャッシュを試してみる価値があります(W3TCがそれをサポートしていますので、その点を調べてください)。それは多くのものをより永続的にし、負荷をMySQLから遠ざけます。
  • webサーバーソフトウェアがボトルネックになっている場合(あなたが実行しているものについて言及していない、Apache?)、代替Webサーバー(nginxのように)を調べるとよいでしょうまたはリバースプロキシ(やはり - 書き込み用のメモリがあります。ワニスについては良いことがわかりました)。
0
Rarst

あなたは冗談ではありませんでした、あなたのサイトに行こうとしたところ500内部エラーが発生しました。おそらくあなたが使用しているプラ​​グインの数を減らし、すべての画像が最適化されていることを確認するなどしてページサイズを小さくすると、読み込みに必要な帯域幅が少なくなり、エラーも少なくなります。

PHPの HIP HOP についても調べることをお勧めします。私はそれを実装したことはありませんが、それを作成して使用した後に彼らのサーバーの負荷が約30%減少するのを見たfacbookの人々によってオープンソースとしてリリースされました。基本的には通常のphpファイルを受け取り、それらをC++バイナリに変換して提供します。

0
user4511

あなたが持っているハードウェアは(ベンチマークとして、私が2GBのSlicehost VPSで最大40,000日のページビューでピークを迎えるサイトとして)述べられたトラフィックに容易に対処するべきです - それは何かがひどく悪いことを示唆します。

だから、他の人が言ったように、あなたがしなければならない最初のことは問題がどこにあるかを理解することです。

  1. あなたが負荷をかけているときtopはあなたにどんな情報を与えますか?スワップメモリ​​を使用していますか。メモリとCPUでソートすると、負荷が急上昇していますか。トッププロセスは何ですか。

  2. あなたのサーバーへの洞察を与えるために munin のようなものをインストールできますか?

  3. Apacheを実行していると仮定すると、それはどのように構成されていますか - 知っておくべき重要なことは以下のとおりです。

    • タイムアウト
    • 生き続ける
    • MaxKeepAliveRequests
    • KeepAliveTimeout
    • (あなたがApacheをpreforkモードで走らせていると仮定して) - あなたのApache confファイルのpreforkセクションにある全てのconfig行。
  4. このコマンド - ps -ylC httpd --sort:rssを実行すると、Apacheプロセスが使用しているメモリ量がわかります。

  5. mtopmysqltuner をインストールします - 両方ともapt経由で利用可能です-取得する。また、 MySQLスローロギング をオンにする必要があります - 通常はmy.cnfファイルの行のコメントを解除するだけです。

    • mtopを使用すると、SQLクエリの実行状況をリアルタイムで確認できます(ゆっくり)。 mysqltunerは、MySQLの設定にどのような変更を加える必要があるのか​​を理解させるでしょう。
  6. 他の人が示唆しているように、忙しい時期にプラグインをオフにするとどうなりますか?サイトはスピードアップしますか?どのプラグインをインストールしましたか?

  7. あなたがあなたの忙しい期間の間にどれだけのトラフィックを得ているかについての任意の考えを持っていますか?例えば、10分で4000ページビュー。

これらの情報源からの情報で武装して、あなたは何が悪くなっているかについてもっと良い考えを持つでしょう。

0
anu

私はあなたがどのプログラムをインストールしたのかわからないが、おそらくそのAPC - Zendの問題:

http://www.ivankristianto.com/web-development/server/alternative-php-cache-apc-not-compatible-with-zend-optimizer/1726/

私はAlternative PHP cache(APC)をインストールした後、この問題は私のVPSで起こります。また、私はすでに同じVPSにZendオプティマイザをインストールしています。私がAPCをインストールした後、私のWordPressブログは奇妙なふるまいを見せます。時々私はError 500 Internal Server Errorを得ました、そして時々私はPHP致命的エラーを得ました。

0
Ünsal Korkmaz