- 2013-05-01 (水) 13:22
- PHP
PHP5.5 から標準バンドルされる Zend OPcache を PHP5.4 にインストールしてみました。
インストールする環境は Vagrant 上の CentOS6.4 です。PHP は remi リポジトリからインストールしています。
$ php -v PHP 5.4.14 (cli) (built: Apr 11 2013 11:04:32) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
Zend OPcache のインストール
remi リポジトリには Zend OPcache は存在しないようなので、github からソースをダウンロードしてビルドしました。
手順は Zend OPcache の github ページに記載されている内容そのままです。
なおビルドに際して php-devel が必要となるので、これもインストールしておきます。
$ sudo yum install php-devel --enablerepo=remi $ git clone https://github.com/zend-dev/ZendOptimizerPlus.git $ cd ZendOptimizerPlus $ phpize $ ./configure --with-php-config=/usr/bin/php-config $ make $ make install
これで /usr/lib64/php/modules/ 以下に opcache.so が作成されます。(ディレクトリは環境によって異なります。)
$ ls /usr/lib64/php/modules/opcache.so /usr/lib64/php/modules/opcache.so
あとは php.ini にて、opcache.so を読み込むように設定を追加します。
$ sud vim /etc/php.ini ; 以下を追加 zend_extension=/usr/lib64/php/modules/opcache.so
php -v を実行すると 「with Zend OPcache」表示され、Zend OPcache が有効になっていることが分かります。
$ php -v PHP 5.4.14 (cli) (built: Apr 11 2013 11:04:32) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with Zend OPcache v7.0.2-dev, Copyright (c) 1999-2013, by Zend Technologies
ベンチマーク
Zend OPcache の効果を確認するために簡単なベンチマークを取ってみます。
- ベンチマークは ab にて行う( ab -c 50 -n 1000 http://localhost/helllo )
- httpd stop & start 後に6 回計測して、5回分の平均値を算出(初回はキャッシュ処理を行うので除外)
- 対象アプリケーションは CakePHP2.3.2 で “Hello!” を表示するだけのもの。(ソース)
PHP のみ、PHP + Zend OPcache の他に比較として PHP + APC(3.1.13 / pecl でインストール)も計測しました。
結果は以下になります。
Zend OPcache を組み込むと 5 倍近くパフォーマンスが向上しています。APC も速くなっていますが、Zend OPcache の方が 20% ほど速いようです。
Requests per second | Rate | |
---|---|---|
PHP5.4.14 | 49.41 | 1 |
PHP5.4.14 + APC 3.1.13 | 215.3 | 4.3 |
PHP5.4.14 + Zend OPcache 7.0.2-dev | 258.4 | 5.2 |
ためしに Zend OPcache と APC を同時に有効にしてみましたが、サンプルアプリケーションでは問題無く動作しました:D
PHP5.4 で使うなら Zend OPcache ? APC ?
ここ数年は PHP でコードキャッシュなら APC が定番でしたが、PHP5.4 以降対応版がまだ beta となっています(概ね問題無いようですが)。一方、Zend OPcache はパフォーマンスで APC と同等もしくは上回っており、PHP5.5 からは標準バンドルされるということで、今後を考えると Zend OPcache を利用するのが良さそうです。
ただし Zend OPcache 自体もまだ開発が進んでいる段階ですので、本番環境での利用についてはリスクを承知の上でお願いします。