WordPressのチューニングで300倍も高速化しました(その2:PHP-PECL-APCで1.5倍)

公開日: : 最終更新日:2014/12/01 コンピュータ, WordPress , ,

PHP-PECL-APCによるお手軽チューニング

WordPressチューニングのお話、第二回目です。ランニングコストを抑えるために格安なVPSサービスを選んだわけですが、WordPressを運用していくには少々、性能不足だと感じています。

前回の記事で、チューニング前のベンチマークを取得してみました。この記事の前提条件やシステム環境についても記載しています。予めご覧ください。
WordPressのチューニングで300倍も高速化しました(その1)

これまでのチューニング

  1.  チューニング前の処理性能︰0.31リクエスト/sec

 

第二回目のチューニング

今回は、PHP-PECL-APCAlternative PHP Cache)でチューニングします。このAPCの導入は実に簡単で、じーなか.comのサーバがCentOSなのでyumでインストールするだけで終わります。では、PHP-PECL-APCを導入すれば早くなる、それだけで良いのでしょうか?

大切なWebサーバ、しかもWordPressの核となるPHPに変更を加えるのですから、当然、そのデメリットも把握すべきです。まずは、PHP-PECL-APCがどういう物なのか見てみましょう。調べてみました。

PHP-PECL-APCとは

PHP-PECL-APCは、WordPressに組み込むプラグインではなく、PHPの実行環境に組み込んで高速化を図るためのものです。

PHPマニュアル
http://jp2.php.net/manual/ja/intro.apc.php

Alternative PHP Cache (APC) は、PHP の実行コードをキャッシュする仕組みで、 フリーかつオープンに使用できます。PHP の中間コードのキャッシュ・最適化を行うための、 フリーでオープンかつ堅牢なフレームワークを提供するということを目標としています。

要は、PHPのスクリプト(プログラムコード)を効率良く実行させるための仕組みです。

PHPのようなスクリプト系のプログラム言語は、人間が読み書きできる形でコーディングすれば動くようにできています。だから、実は、裏側では、コンピュータが自動的に機械語に翻訳して処理を実行する必要があるのです。翻訳された内容を中間コードと呼びましょう。

この中間コードへの翻訳を、コンピュータがする必要がなくなれば、自ずと仕事量も減り、処理速度も上がるのです。

この翻訳済み中間コードをサーバのメモリ上に予め読み込んでおく仕組みを提供するのが、PHP-PECL-APCです。翻訳後のプログラムを先に読み込んでおけば早くなるじゃない、という発想です。

PHP-PECL-APCを導入した結果

PHP-PECL-APCは yum でインストールします。

yum install php-pecl-apc

インストール後の、ApacheBenchのベンチマーク結果は以下のとおり。APC導入前で処理性能が 0.31リクエスト/sec だったのが、0.47リクエスト/sec となりました。約1.5倍の性能向上です。

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 www.jinaka.com (be patient).....done

Server Software:        Apache
Server Hostname:        www.jinaka.com
Server Port:            80

Document Path:          /
Document Length:        42384 bytes

Concurrency Level:      10
Time taken for tests:   23.384 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      426330 bytes
HTML transferred:       423840 bytes
Requests per second:    0.43 [#/sec] (mean) <- 1.5倍!
Time per request:       23384.066 [ms] (mean)
Time per request:       2338.407 [ms] (mean, across all concurrent requests)
Transfer rate:          17.80 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    6   2.1      7       7
Processing: 16762 19741 2516.3  20947   23377
Waiting:    15674 19015 2894.2  20255   23346
Total:      16769 19747 2517.3  20954   23384

Percentage of the requests served within a certain time (ms)
  50%  20954
  66%  21052
  75%  21775
  80%  22566
  90%  23384
  95%  23384
  98%  23384
  99%  23384
 100%  23384 (longest request)

PHP-PECL-APCを理解して使おう

メモリ上に読み込むと早くなりそうなのはだいたい分かりました。では、翻訳の元となるプログラムコードが更新された時はどうなるか?


Sponsored Link

もちろん、再翻訳が必要になります。

ただ、コンピュータからは、いつプログラムコードが変更されるかはわからないものです。PHP-PECL-APCは、その変更を検出する機能を備えています。

PHPスクリプトが呼び出されるごとに、つまり、ブログにアクセスされるごとにプログラムコードが変更されているかどうかをチェックします。

でも、WordPressの管理者は、バージョンアップしない限りは、PHPのプログラムコードは変更されないので、チェックそのものが不要です。そのチェックをするな、と指定できるのがパラメータの設定です。

PHP-PECL-APCは、幾つものパラメータでその挙動をコントロールできます。もちろん、デフォルトのままでも高速化は図れますが、パラメータの設定次第では、さらに高速化できるかもしれません。

PHP-PECL-APCのパラメータは /etc/php.d/apc.ini で設定します。パラメータの説明はPHPのマニュアルに記載があるのでご覧ください。
http://jp2.php.net/manual/ja/apc.configuration.php

コードの変更チェックを無効化してみると

上でご説明した、PHPのプログラムコードの変更チェックを無効化した場合の、処理性能の変化を見てみました。まずはパラメータの変更です。

; Whether to stat the main script file and the fullpath includes.
;apc.stat=1
apc.stat=0    <- 値を0に設定

パラメータ変更後、Apacheを再起動しApacheBenchでベンチマークを取り直してみます。

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 www.jinaka.com (be patient).....done

Server Software:        Apache
Server Hostname:        www.jinaka.com
Server Port:            80

Document Path:          /
Document Length:        42384 bytes

Concurrency Level:      10
Time taken for tests:   23.727 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      426330 bytes
HTML transferred:       423840 bytes
Requests per second:    0.42 [#/sec] (mean) <- 性能劣化...
Time per request:       23727.291 [ms] (mean)
Time per request:       2372.729 [ms] (mean, across all concurrent requests)
Transfer rate:          17.55 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    8   3.6     11      11
Processing: 17923 19732 1807.0  19731   23716
Waiting:    17030 19041 2058.1  19034   23531
Total:      17927 19740 1809.2  19742   23727

Percentage of the requests served within a certain time (ms)
  50%  19742
  66%  20618
  75%  20741
  80%  20931
  90%  23727
  95%  23727
  98%  23727
  99%  23727
 100%  23727 (longest request)

あれ、、、性能劣化。。。

ということで、apc.statは1(有効)に戻しました。今は、ApacheBenchで10アクセスという少ないアクセスだったので、大量アクセスの場合には差が見えてくるでしょう、ということで・・・。

次回は、WordPress のプラグイン、WP Super Cache を使い大幅な改善を目指します。

WordPressのチューニングで300倍も高速化しました(その3:WP Super Cacheで360倍)


Sponsored Link

関連記事

no image

grub シングルモード起動

GRUBのメニュー画面で、起動させたいブートイメージにカーソルをあわせ, (edit)をタイプ

記事を読む

cygwinの導入

1. インストール用パッケージをダウンロード cygwinホームページ(http://www.cy

記事を読む

no image

WordPressデバッグモード切り替え方法

WordPress のデバッグモードの切り替え方法。 プラグインの追加やカスタマイズによるエラーや

記事を読む

ServersMan@VPS (Entryプラン)にリモートデスクトップ環境を構築する

当サイトにお越しくださいましてありがとうございます。 今回は、ServersMan@VPSに、

記事を読む

ServersMan@VPS (Entryプラン)にデスクトップ環境を構築する

当サイトにお越しくださいましてありがとうございます。 今回は、MetaTraderの自動売買を可能

記事を読む

WordPressのチューニングで300倍も高速化しました(その3:WP Super Cacheで360倍)

WP Super Cacheによるチューニング WordPressのチューニングのお話、第三回目で

記事を読む

no image

.bash_profile読み直し

1. .bash_profileに設定した変数を変更した場合に、いちいちログアウトしていては面倒。コ

記事を読む

no image

ServersMan@VPS (Entryプラン)にWine環境を構築する(その1)

当サイトにお越しくださいましてありがとうございます。 今回は、Linuxデスクトップ上でWindo

記事を読む

no image

サムネイル生成でエラー

プラグイン Regenerate Tumbnails を使って一括サムネイル生成をしようとして気が付

記事を読む

WordPressのチューニングで300倍も高速化しました(その1)

WordPressのチューニング WordPressは、標準の使い方のままだと、PHPスクリプトが

記事を読む



文鳥ブログ ふたたび!

以前も文鳥に関するブログは書いていたのですが、 諸事情により中断してしまったことがありました。 でも決して、飼っていた文鳥が死んだとか逃げたとかではありませ

ミドリガメ
ミドリガメを飼っています

我が家では、「トト」という名前のミドリガメを飼っています。 ホームセンターのペットショップで買ってきたミドリガメの子どもです。 飼い始めてから3

no image
WordPressデバッグモード切り替え方法

WordPress のデバッグモードの切り替え方法。 プラグインの追加やカスタマイズによるエラーや動作がおかしいがなかなか原因がつかめない場合に、デバッグモー

no image
ServersMan@VPS (Entryプラン)にWine環境を構築する(その1)

当サイトにお越しくださいましてありがとうございます。 今回は、Linuxデスクトップ上でWindowsアプリケーションを稼働させる環境、Wineを導入します。

no image
サムネイル生成でエラー

プラグイン Regenerate Tumbnails を使って一括サムネイル生成をしようとして気が付いた問題。 The resize request wa

→もっと見る

PAGE TOP ↑