まえがき
PHPのことをよく理解しておらず、まさか毎回アクセスする度にコンパイラが起動して解析を行っているとは思っていませんでした。
特に設定せずとも効率よくやっていると思っていたのにそうじゃないんですね。
というわけでOPCacheを導入してみました。
OPCacheは簡単に言うとアクセスされる度に毎回コンパイラを起動してPHPのソースを解析していると時間がかかるので、解析後の状態をメモリに保存して次からはメモリから解析後のPHPを直接読み込んじゃおうということをやってくれるモジュールのことです。
ここから先の手順ですが、私はPHPをソースからコンパイルしているので、パッケージでやってる場合はどうするのか分かりません!
なのでここからはソースからインストールしている方が対象となります。
環境
まずは環境についてですが、nginx1.10.1、php-fpm7.0.3、php7.0.3となります。
OPCacheの有効/無効のチェック
最初にOPCacheが有効になっているかチェックします。
php -i | grep 'opcache'
これで何も表示されないとOPCacheは入ってません。
では続いてモジュールが入っているか確認します。
php -v
PHP 7.0.3 (cli) (built: Jul 2 2016 22:21:44) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
OPCacheが見当たらないので入ってません。
OPCacheモジュールのインストール
モジュールが入っていないので、まずはconfigureしなおしましょう。
configureに下記オプションを追加します。
--enable-opcache
configure後makeしなおしてインストールします。
make
make install
php.iniの編集
次にphp.iniを修正します。
とりあえず公式の内容で設定しました。
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.max_wasted_percentage=5
opcache.revalidate_freq=60
opcache.fast_shutdown=1
同じくphp.iniでopcache.soのzend_extentionの場所を指定します。
opcache.soの場所は環境によるので適時変更してください。
zend_extension=/【環境による】/opcache.so
php-fpmの再起動
次にphp-fpmを再起動します。
sudo service php-fpm restart
OPCacheのインストール確認
では、OPCacheが入っているか確認してみましょう。
php -v
PHP 7.0.3 (cli) (built: Jul 2 2016 22:21:44) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
ちゃんと OPCacheが入ってますね!
OPCacheの状態をブラウザ上で確認する
OPCacheが仕事しているか確認する時は、私は下記のツールを使用しています。
OCP – Opcache Control Panel
上記ocp.phpをブラウズできる適当な場所に保存してアクセスしてみて下さい。(誰でもアクセスできないように制限はかけましょう)
hit率など確認したい項目はこれで事足りるはずです。
適宜様子を見ながらメモリ量など最適化していきましょう。
あとがき
OPCacheの導入については以上です。
導入前と導入後でどれだけ速度が変わったかまた一か月後ぐらいに追記します。