開発ブログ

OPcacheとAPCu

2016-08-19 17:54 - saito

はじめまして。エンジニアの齋藤です。
先日、深遠なる理由によりPHPをコンパイルする機会があったので、その際に行ったOPcacheの設定とAPCuのインストールをまとめてみます。

OPcache:バイトコードキャッシュ

PHPのconfigure時にopcacheはデフォルトで有効になっているので、コンパイル時に自動的にopcache.soは作成されたのですが、php.iniにopcacheセクションはあるものの、ロードの記述がないので、
zend_extension=opcache.so
と明示的にロードする必要があります。
extensionでロードできないので小一時間悩みました。
php.netのインストール手順のページにzend_extensionでロードしろと書いてありますね。マニュアルはちゃんと見ましょう。

設定については同じページに推奨設定があります。引用しますと、

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

revalidate_freqが60秒となっています。
これが長いと、ファイルを上書きしてもなかなかキャッシュを再作成してくれないので、更新が頻繁にあるのであれば、デフォルトの2でもいいと思います。
特に開発環境などでは0にしてもいいくらいかと思います。
残りの項目は管理画面で使用量などチェックしながら調整します。

管理画面は3つほどあるみたいですが、
https://gist.github.com/ck-on/4959032
https://github.com/amnuts/opcache-gui
https://github.com/rlerdorf/opcache-status/blob/master/opcache.php
所感としてはどれもそんな変わりませんでした。

参考:PHP OPCache 確認ツール 3つまとめ | 丸ノ内テックブログ

メモ:OPcacheのgitのありか
https://github.com/zendtech/ZendOptimizerPlus

APCu:ユーザーキャッシュ

APCuも入れます。
PHP-5.6.24でpecl installしたところ
pecl/apcu requires PHP (version >= 7.0.0-dev), installed version is 5.6.24
と言われました。
どうやらAPCu5からはphp7にしか対応してないようなので、peclから4系を落としてきて、コンパイルして入れる事にします。

インストールが終わったらphp.iniに追記します。

現時点ではphp.netのAPCuが日本語訳になっていないので、英語がさっぱり分からない私は旧APCを参考にしてます。
とはいえ、APCuではオプションがかなりOPcacheに移動したので、shm_sizeくらいしか変更してません。
こちらも管理画面を見ながら値を適宜調整していきます。
管理画面はtarballに入っているapc.phpを使いますが、認証がうまく動いてくれないので、USE_AUTHENTICATION0にします。
認証なしでキャッシュの削除などができるようになってしまい危険ですので、制限ディレクトリに入れましょう。

メモ:PHP7以上であれば、後方互換用のapcu_bcも入れた方がいいと思われます。
メモ:gccの最適化オプション。今後コンパイルする時にテスト。

以上、そんなに特殊な事はやってないのですが、備忘録的にまとめてみました。