PHP

OPcache導入してみた!(速さ検証もあるよ!)

OPcacheとは

OPcacheとはコードをコンパイルし、共有メモリへ保存しておく仕組みのことです。
PHPはインタプリタですが、この仕組みによってリクエストごとにスクリプトを読む必要がなくなり、パフォーマンスの向上が期待されます。

インストール

本記事ではWindowsのphp 7.2.4で設定を行っています。あらかじめご了承ください。

準備

特になし(さすがにPHPは入ってますよね?)

設定

php.iniで以下の設定を記述します。

php.ini
# Linux,Macの場合
zend_extension=/[それぞれのPHPのextensionのパス]/php_opcache.dll
# Windowsの場合
zend_extension=C:\[それぞれのPHPのextensionのパス]\php_opcache.dll

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

設定内容はphp.netの推奨設定で推奨される一般的設定です。

オプション デフォルト 意味
opcache.enable 1 キャッシュを有効にする
opcache.enable_cli 0 CLI版のキャッシュを有効にする
opcache.memory_consumption 64 使用される共有メモリのサイズ
opcache.interned_strings_buffer 4 internされた文字列を格納されるために使用されるメモリ量
opcache.max_accelerated_files 2000 スクリプトの最大数最小値は200
opcache.revalidate_freq 2 更新時にタイムスタンプをチェックする頻度。 opcache.validate_timestampsがデフォルトで有効なのでチェックされる
opcache.fast_shutdown 0 それぞれに割り当てられたブロックを開放しない高速シャットダウンシーケンスが使用される

変更可能範囲と他のオプションについてはOPcacheの実行時設定を参照してください。

確認

php -v で確認します。

opcache_install_01.PNG

図のように表示されればOpache導入成功です。めっちゃ簡単!

検証

せっかくなので速さ検証してみます。
hello worldを返すだけのphpプログラムを作成してみたので、ベンチマークとってみます。
ab -c 100 -n 100 (100人が同時に1リクエストした場合を想定)で検証したいと思います。

導入前

no-cache.PNG

導入後

cached.PNG

うーん、まぁ全体的に速くなってるけどあんまり違い分からないな...。
Laravel5.6プロジェクトはどうなるかも見てみます。

導入前

laravel-no-cached.PNG

導入後

laravel-cached.PNG

ちょっぱや!倍近く速くなってる!

参考