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

関連記事

small_4919659112

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

cygwinの導入

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

記事を読む

no image

私がMetaTraderが稼働する自動売買環境を構築したきっかけ

当サイトにお越しくださいましてありがとうございます。 今回は、私が構築したMetaTraderの自

記事を読む

no image

.bash_profile読み直し

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

記事を読む

small_4919659112

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

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

記事を読む

no image

セキュリティ編(クラッキング!)

どうもおかしい? 開発用として使用していた某有名メーカーのサーバーが、どうも様子がおかしい。それは

記事を読む

no image

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

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

記事を読む

no image

grub シングルモード起動

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

記事を読む



北海道の小旅行記 夏の利尻 2000

利尻に到着 鴛泊港到着 フェリー乗り場横の食堂 なぜか三色丼・・・ 仙法志御崎海岸夏真っ盛りの8月。利尻島に渡るべく、稚内に

北海道つながりリンク

北海道な生活! みる・食べる・行く!! 北海道な生活!みる・食べる・行く!! 札幌にお住まいの旅人さんのブログです。北海道の食や旅先の写真が楽

積丹町(うにツアー?) 2001.4.28~4.29 札幌市 ~ 積丹町 (美国 ~ 日司 ~ 神威岬) ~ 余市町 ~ 仁木町

出発。日帰り旅行 出発前、というよりも、その日は昼過ぎまでまったく出かけなさそうな雰囲気。就職して初めて取るまともなGW。「出かけても混んでいるだろう」という

富良野市(北の国から) 2001.6.5~6.6 札幌市 ~ 富良野市(富良野駅 ~ 麓郷) ~南富良野町 ->かなやま湖畔キャンプ場

富良野へ出発 2001年、初キャンプ。今年は去年より1か月も早いキャンプのスタート。キャンプの場所は南富良野町、金山湖にある「かなやま湖畔キャンプ場」。 思え

dohtoh1
夏、道東旅行(我が子初遠征) 【前編】 2002.8.22~8.26(うち、8.22~8.23) 札幌市 ~ 遠軽町(旭川市経由) ~佐呂間町 ~ 女満別町 ~ 弟子屈町 ~羅臼町 ~ 斜里町 ~ 丸瀬布町

旭川経由で遠軽町へ 一日目ルート 遂にやってきた夏休み。天気は雲が出てるものの青空。今年はお盆から時期をずらして8/22~26の5日間で道東を回る予定。

→もっと見る

  • ページランク
    PAGE TOP ↑