PHP7.0.3にOPCacheを導入してみた

JavaScriptを有効にしてください

前書き

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

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

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

環境

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

OPCacheの有効/無効のチェック

最初にOPCacheが有効になっているかチェックします。

1
php -i | grep 'opcache'

これで何も表示されないとOPCacheは入ってません。
では続いてモジュールが入っているか確認します。

1
2
3
4
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に下記オプションを追加します。

1
--enable-opcache

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

1
2
make
make install

php.iniの編集

次にphp.iniを修正します。
とりあえず公式の内容で設定しました。

1
2
3
4
5
6
7
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の場所は環境によるので適時変更してください。

1
zend_extension=/【環境による】/opcache.so

php-fpmの再起動

次にphp-fpmを再起動します。

1
sudo service php-fpm restart

OPCacheのインストール確認

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

1
2
3
4
5
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の導入については以上です。
導入前と導入後でどれだけ速度が変わったかまた一か月後ぐらいに追記します。


スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア