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_extension | opcache | Zend OPcache拡張モジュールを有効にする |
opcache.enable | 1 | OPCacheを有効化するかどうか |
opcache.enable_cli | 1 | PHPのCLIバージョンでZend OPCacheを有効にするかどうか |
opcache.blacklist_filename | /etc/php.d/opcache*.blacklist | OPcache ブラックリスト・ファイルの場所。高速化すべきではないファイル名 |
opcache.huge_code_pages | 0 | PHPコード(テキストセグメント)の巨大なページへのコピーを有効または無効にします |
その他重要そうなもののみピックアップ。
項目 | 設定(デフォルト値) | 解説 |
---|---|---|
opcache.memory_consumption | 128 | OPcacheの共有メモリストレージサイズ |
opcache.max_accelerated_files | 10000 | OPcacheハッシュテーブル内のキー(スクリプト)の最大数 |
ざっとこんなところだろうが、一応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 -----