OPcacheを導入する

作業概要

EFS+NLBを利用してWordPressを冗長化したのはよかったが、EFSの部分がボトルネックとなりものすごく遅い。
なのでCloudFront+OPcacheで速くする。
CloudFrontについてはすでに記事を書いているのでそちらを見てもらうとして本記事ではOPcacheをインストール、設定していく。

OPcacheについて

phpはインタプリタ型のスクリプト言語。
解釈しながら実行する方式なので、コンパイル型より遅い。
毎回解釈するのではなく、解析済みのバイトコードをキャッシュするPHPアクセラレータ(OPcacheなど)を使うことにより、呼び出し毎にソースコードを解釈しなおす必要がなくなる。

作業記録

yum install --enablerepo=remi,remi-php74 php-opcache
php -v
-----
PHP 7.4.7 (cli) (built: Jun  9 2020 10:57:17) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.7, Copyright (c), by Zend Technologies
-----

インストールするだけで有効になっているのは /etc/php.d/10-opcache.ini をインクルードしているから。
この時点でもうWordPressは大分早い。
さすがに管理画面は若干重いが、普通にサイト閲覧する分には全く問題ない速度。
ベンチマーク的なもので計測したいがそれは今回置いておくとして、設定を見ていく。

設定解説

/etc/php.d/10-opcache.iniでコメントインされているものは下記5つのみ。

項目設定説明
zend_extensionopcacheZend OPcache拡張モジュールを有効にする
opcache.enable1OPCacheを有効化するかどうか
opcache.enable_cli1PHPのCLIバージョンでZend OPCacheを有効にするかどうか
opcache.blacklist_filename/etc/php.d/opcache*.blacklistOPcache ブラックリスト・ファイルの場所。高速化すべきではないファイル名
opcache.huge_code_pages0PHPコード(テキストセグメント)の巨大なページへのコピーを有効または無効にします

その他重要そうなもののみピックアップ。

項目設定(デフォルト値)解説
opcache.memory_consumption128OPcacheの共有メモリストレージサイズ
opcache.max_accelerated_files10000OPcacheハッシュテーブル内のキー(スクリプト)の最大数

ざっとこんなところだろうが、一応opcache関連の設定を吐き出しておいたので貼っておく。
かなりあるな・・・。
時間あるときどんどん解明していくか。
とりあえずはカスタマイズせずデフォルト設定のままにしておく。

php -i | grep opcache
-----
Additional .ini files parsed => /etc/php.d/10-opcache.ini,
opcache.blacklist_filename => /etc/php.d/opcache*.blacklist => /etc/php.d/opcache*.blacklist
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => On => On
opcache.enable_cli => On => On
opcache.enable_file_override => Off => Off
opcache.error_log => no value => no value
opcache.file_cache => no value => no value
opcache.file_cache_consistency_checks => On => On
opcache.file_cache_only => Off => Off
opcache.file_update_protection => 2 => 2
opcache.force_restart_timeout => 180 => 180
opcache.huge_code_pages => Off => Off
opcache.interned_strings_buffer => 8 => 8
opcache.lockfile_path => /tmp => /tmp
opcache.log_verbosity_level => 1 => 1
opcache.max_accelerated_files => 10000 => 10000
opcache.max_file_size => 0 => 0
opcache.max_wasted_percentage => 5 => 5
opcache.memory_consumption => 128 => 128
opcache.opt_debug_level => 0 => 0
opcache.optimization_level => 0x7FFEBFFF => 0x7FFEBFFF
opcache.preferred_memory_model => no value => no value
opcache.preload => no value => no value
opcache.preload_user => no value => no value
opcache.protect_memory => Off => Off
opcache.restrict_api => no value => no value
opcache.revalidate_freq => 2 => 2
opcache.revalidate_path => Off => Off
opcache.save_comments => On => On
opcache.use_cwd => On => On
opcache.validate_permission => Off => Off
opcache.validate_root => Off => Off
opcache.validate_timestamps => On => On
-----

次の記事

Apache Benchでの速度検証