PHPアクセラレータ「APCu」「OPCache」の導入
次に、PHP 5.5以降で導入された、PHPアクセラレータ「APCu」および「OPCache」を導入します。
PHPアクセラレータ「APCu」は、PHPにユーザキャッシュ機能を提供するモジュールです。
ユーザキャッシュとは、PHP内部で使用されるオブジェクト・変数などのユーザデータをキャッシュ(メモリに保存)するものです。APCuは、ユーザデータをメモリ内にKVS(Key Value Store)形式でキャッシュします。
PHPアクセラレータ「OPCache」は、PHPにオペコードキャッシュ機能を提供するモジュールです。
通常のPHPの実行プロセスは、2段階で行われます。まず、PHPのソースコードを構文解析し中間コード(バイトコード)に変換します。次に、変換されたバイトコードをPHP仮想マシンであるZend Engineが実行します。
PHPアクセラレータ「OPCache」はこのPHP中間コードをキャッシュし、二度目以降のアクセスではキャッシュした中間コードを再利用します。該当するPHPのソースコードに変更が加えられていなければ、最初の中間コードへの変換が省略できるため、PHPアクセラレータを使用することでPHPの実行速度を向上することができます。PHPのソースコードに変更が加えられていた場合は、キャッシュされた中間コードは破棄されるため、PHPアクセラレータ使用の有無によりPHPの出力結果が変わることはありません。
以下のコマンドで、APCuとOPcacheをインストールします。
[root@CodeZine-CentOS ~]# yum install --enablerepo=remi,remi-php56 install php-pecl-apcu php-opcache -y
APCuの設定ファイル(/etc/php-zts.d/40-apcu.ini)に、太字部分の設定を追加します。
extension = apcu.so apc.enabled=1 apc_cli.enable = 1 apc.shm_size = 64M apc.mmap_file_mask=/tmp/apc.XXXXXX
OPCacheの設定ファイル(/etc/php-zts.d/10-opcache.ini)に、太字部分の設定を追加します。
zend_extension=opcache.so opcache.enable=1 opcache.eneble_cli = 1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.blacklist_filename=/etc/php-zts.d/opcache*.blacklist
HTTPサーバではmod_phpを使用してPHPを呼び出しているため、APCuとOPCacheを有効にするためにはHTTPサーバを再起動する必要があります。
[root@CodeZine-CentOS ~]# systemctl restart httpd
ブラウザでWordPressのトップページを表示させ、FireBugでページのロード時間を確認します。
筆者の環境では74msでした。APCuおよびOPCache導入前と比較してロード時間が42%になりました。
続いて、コンソールからabコマンドでベンチマークをとります。
[php@CodeZine-CentOS ~]$ ab -n 100 -c 10 http://localhost/
筆者の環境では、1秒当たりの同時アクセス数は17.85となり、APCuおよびOPCache導入前と比較して2.78倍に性能向上しました。