連載
» 2016年04月12日 05時00分 UPDATE

とにかく速いWordPress(5):「WordPress“1000倍”高速化」チューニング 第一弾──「PHP 5.6」「OPCache」「APCu」を導入する (1/2)

エンタープライズ用途での利用が増えている「WordPress」の高速化チューニングテクニックを解説する本連載。今回から数回にわたって、前回の5.4倍を大きく上回る「1000倍高速化」までチューニングするテクニックをお届けします。

[中村けん牛,プライム・ストラテジー]
backn2.gif

連載バックナンバー

 前回は、Amazon Web Services(以下、AWS)の仮想クラウドサーバ「Amazon Elastic Compute Cloud(Amazon EC2)」上のCentOS 7にインストールしたWordPressを題材に、「5.4倍速くする」テクニックを解説しました。具体的には、CentOS 7の標準のリポジトリのみを用いて、gzip圧縮、Tuned、Apacheのevent MPM+php-fpm構成の導入などを行いました。

 今回は、そのWordPressをさらに「高速化」していきます。CentOS 7の標準リポジトリ以外のリポジトリも利用して、「PHP 5.6」「PHP 7」「HHVM(HipHop Virtual Machine)」「Nginx」などを導入し、さらなるチューニングを施していきます。最終的には、1秒当たりの同時アクセス数パフォーマンスにおいて、ページキャッシュを利用しないNginx+HHVM構成で「約18倍」、この構成にページキャッシュであるNginxのFastCGIキャッシュを追加して「約1000倍」のパフォーマンス向上を目指します。

 なお今回より、パフォーマンスの測定に当たっては、「1秒当たりの同時アクセス数」を基準にチューニングをしていきます。チューニングを進めるほどに、ページのロード時間に含まれるインターネット上の通信時間(レイテンシ)が無視できないほどの割合になり、測定がうまくできなくなることが理由です(ページのロード時間も参考として示します)。

photo WordPressの日本語ローカルサイト

 では早速実施していきましょう。これまで解説してきたチューニングの続きですので、この記事からご覧の方は、連載バックナンバーから、まず「5.4倍高速化」までチューニングを済ませておいてください。

チューニング内容 ページのロード時間
(デフォルト環境比)
1秒当たりの同時アクセス数
(Requests per second)
デフォルト環境 176ms 11.24
APCの導入
 チューニング方法をおさらい
70ms(約251%) 29.20
OPcache+APCuを導入
 チューニング方法をおさらい
66ms(約266%) 30.51
MariaDBの設定を調整
 チューニング方法をおさらい
64ms(約275%) 31.82
翻訳アクセラレータを導入(キャッシュ)
 チューニング方法をおさらい
53ms(約332%) 39.29
翻訳アクセラレータを導入(翻訳を停止)
 チューニング方法をおさらい
36ms(約488%) 56.78
gzip圧縮を用いる
 チューニング方法をおさらい
35ms(約502%)
Tunedの調整
 チューニング方法をおさらい
34ms(約517%) 58.47
event MPM+php-fpm構成に変更
 チューニング方法をおさらい
33ms(約537%) 60.79
AWSユーザーならば場合によって……
 チューニング方法をおさらい
31ms(約567%) 71.76

PHP 5.6+OPCache+APCuを導入する

 前回紹介したPHPの実行環境は、CentOS 7標準のPHP 5.4です。今回は外部リポジトリのEPELリポジトリとRemiリポジトリを導入して、「PHP 5.6」環境を構築します。

 まず、仮想マシンにSSHでログインして、管理者ユーザーに変更します。

[centos@ip ~]$ sudo su -

 既存のPHP 5.4と関連パッケージを取り除きます。

[root@ip ~]# yum remove php* -y

 EPELリポジトリとRemiリポジトリを追加し、PHP 5.6、OPCache、APCuなどの関連パッケージを導入します。

[root@ip ~]# yum install epel-release -y
[root@ip ~]# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
[root@ip ~]# yum --enablerepo=remi,remi-php56 install php php-mysqlnd php-gd php-xml php-xmlrpc php-mbstring php-mcrypt php-fpm php-opcache php-apcu -y

 PHP 5.4環境で作成した「apc.ini」が残っていますので、こちらが読み込まれないようにバックアップファイルにしておきます。

 なお、上記の処理でPHP本体の設定ファイルは「/etc/php.ini」、OPCacheの設定ファイルは「/etc/php.d/10-opcache.ini」、APCuの設定ファイルは「/etc/php.d/40-apcu.ini」として既にインストールされています。

[root@ip ~]# mv /etc/php.d/apc.ini /etc/php.d/apc.ini.bak

 PHPのタイムゾーンを設定します。/etc/php.iniの889行目付近の該当する行を次のように変更してください。

(略)
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = UTC
(略)
リスト:「/etc/php.ini」より該当箇所を抜粋

 これで、PHP 5.6環境のインストールは完了です。正しくインストールされたか、php -vコマンドでステータスを確認します。

[root@ip ~]# php -v
PHP 5.6.20 (cli) (built: Mar 31 2016 07:17:10) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
[root@ip ~]# php -i | egrep 'apc|opcache'
Additional .ini files parsed => /etc/php.d/10-opcache.ini,
/etc/php.d/40-apcu.ini,
apc
apcu
MMAP File Mask => /tmp/apc.XXXXXX
apc.coredump_unmap => Off => Off
apc.enable_cli => Off => Off
apc.enabled => On => On
(略)
opcache.blacklist_filename => /etc/php.d/opcache*.blacklist => /etc/php.d/opcache*.blacklist
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => On => On
opcache.enable_cli => Off => Off
(略)
       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。