php7.0.3にopcacheを導入してみた

phpのことをよく理解しておらず、まさか毎回アクセスする度にコンパイラが起動して解析を行っているとは思っていませんでした。
特に設定せずとも効率よくやっていると思っていたのにそうじゃないんですね。

というわけでopcacheを導入してみました。
opcacheは簡単に言うとアクセスされる度に毎回コンパイラを起動してphpのソースを解析していると時間がかかるので、解析後の状態をメモリに保存して次からはメモリから解析後のphpを直接読み込んじゃおうということをやってくれるモジュールのことです。

ここから先の手順ですが、私はphpをソースからコンパイルしているので、パッケージでやってる場合はどうするのか分かりません!
なのでここからはソースからインストールしている方が対象となります。

まずは環境についてですが、nginx1.10.1、php-fpm7.0.3、php7.0.3となります。

最初に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が見当たらないので入ってません。

モジュールが入っていないので、まずはconfigureしなおしましょう。configureに下記オプションを追加します。

--enable-opcache

configure後makeしなおしてインストールします。

make
make install

次に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をrestartします。

sudo service php-fpm restart

では、入っているか確認してみましょう。

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が仕事しているか確認する時は、私は下記のツールを使用しています。

OCP – Opcache Control Panel

ソースコード:https://gist.github.com/ck-on/4959032

上記ocp.phpをブラウズできる適当な場所に保存してアクセスしてみて下さい。下記画面が表示されます。(誰でもアクセスできないように制限はかけましょう)

hit率など確認したい項目はこれで事足りるはずです。
適宜様子を見ながらメモリ量など最適化していきましょう。

opcacheの導入については以上です。
導入前と導入後でどれだけ速度が変わったかまた一か月後ぐらいに追記します。

コメント

タイトルとURLをコピーしました