Serversman@VPSでWordPressの高速化

LINEで送る
Pocket

今回はこのブログの高速化に挑戦します。

WordPressは多機能で使いやすいCMSですが、PHPで動的にページを生成していることもあり、デフォルトではレスポンスがもっさりしていると感じることがあります。

加えてServersMan@VPSが若干他のVPSよりパフォーマンスがよくないことも影響しているものと思われます。

ま、この辺は安さとのバランスでコストを選んだわけで納得はしているのですが、ちょっとパフォーマンスを上げてみようというのが今回のエントリです。

事前確認:ApacheBenchの結果

ローカルサーバーからApachBenchでベンチマークを実行してみます。

$ ab -n 50 -c 5 http://seigaji.info/wordpress/
・・・省略・・・
Server Software: Apache
Server Hostname: seigaji.info
Server Port: 80

Document Path: /wordpress/
Document Length: 36071 bytes

Concurrency Level: 5
Time taken for tests: 70.545 seconds
Complete requests: 50
Failed requests: 0
Write errors: 0
Total transferred: 1814050 bytes
HTML transferred: 1803550 bytes
Requests per second: 0.71 [#/sec] (mean)
Time per request: 7054.546 [ms] (mean)
Time per request: 1410.909 [ms] (mean, across all concurrent requests)
Transfer rate: 25.11 [Kbytes/sec] received
・・・省略・・・

-n 50 はリクエスト回数50回
-c 5 は1リクエストあたりの同時アクセス数です。

Testに70.545秒、1アクセスあたり7054.546ミリ秒かかっています。

Apacheのキャッシュを有効にする

Apacheにはキャッシュ機能がついていますが、今回はDiskキャッシュ機能のみ使用します。CentOSのApacheにはmemキャッシュはどうも標準ではついていないみたいです。(間違ってたらごめんなさい)

まずはキャッシュ格納ディレクトリを作成します。

# mkdir /var/cache/apache
# chown apache:apache /var/cache/apache

/etc/httpd/conf/httpd.confを編集してApacheのディスクキャッシュを有効にします。

<IfModule mod_cache.c>
   <IfModule mod_disk_cache.c>
    # キャッシュデータの保存先
    CacheRoot /var/cache/apache/
    # キャッシュ対象URI
    CacheEnable disk /wordpress
    # キャッシュディレクトリの深さ
    CacheDirLevels 5
    # キャッシュディレクトリの文字数
    CacheDirLength 3
  </IfModule>
</IfModule>

MySQLの最適化

WordPressはMySQLを使用しているのでMySQLに対してもバッファとキャッシュを設定します。/etc/my.confの最後に下記記述を追加。

 key_buffer_size=8M
 sort_buffer_size=2M
 read_buffer_size=128K
 query_cache_size=4M
 table_open_cache=64

・・・若干適当です。

httpdとmysqldの再起動を忘れずに

# apachectl restart
# /etc/init.d/mysqld restart

本命:WP Super Cacheプラグインの導入

今回の高速化の本命、WP Super Cacheプラグインの導入です。

  • 管理画面のダッシュボードでプラグインを検索
    Plugin画面
  • 先頭にWP Super Cacheが出てくるのでインストール
    PlugInList
  • プラグインを有効化すると警告が出るのでプラグイン管理ページを開きます
    有効化
  • パーマリンクエラーが表示されるので「Permalinks Options Page」をクリック
    permalinkエラー
    デフォルトだと?=XXXというページ番号でWordPressはURLを動的に生成するのですが、?を含むURLはうまくキャッシュが生成できないためです。
  • パーマリンク設定でデフォルト以外を選択
    PermaLink
    デフォルト以外なら何でもいいのですが、ここでは日付と投稿名を選択しました。
  • WP Super Cacheの設定画面でキャッシング利用を選択
    WP Super Cache
    キャッシング有効にして「ステータスを更新」をクリック

設定後確認:ApacheBenchの結果

上記設定が終了したので再度ローカルサーバーからApachBenchでベンチマークを実行してみます。

$ ab -n 50 -c 5 http://seigaji.info/wordpress/
・・・省略・・・
Server Software: Apache
Server Hostname: seigaji.info
Server Port: 80

Document Path: /wordpress/
Document Length: 38924 bytes

Concurrency Level: 5
Time taken for tests: 1.816 seconds
Complete requests: 50
Failed requests: 0
Write errors: 0
Total transferred: 1960100 bytes
HTML transferred: 1946200 bytes
Requests per second: 27.53 [#/sec] (mean)
Time per request: 181.635 [ms] (mean)
Time per request: 36.327 [ms] (mean, across all concurrent requests)
Transfer rate: 1053.85 [Kbytes/sec] received
・・・省略・・・

Test Timeが70.545秒→1.861秒に、1リクエストあたり時間が7054.546ミリ秒→181.635ミリ秒で30倍以上速くなりました

まあ最初からServersMan@VPSのブログセットパッケージで契約していればこんな面倒なことやらなくていいんですけどね。:-P

ApacheBench(abコマンド)は自分の管理しているサーバー以外に使うと攻撃とみなされる可能性があるので使う場合は注意してください。

#10/12追記
 なんか時々エラーが発生するようになってしまったので、一時WP Super Cacheプラグインを一時停止します。詳細はこちらに書きましたのでご覧ください。
→やっぱりWP Super Cacheプラグインのせいじゃないっぽいので再度調査します。



LINEで送る
Pocket