CentOS Stream 9 + PHP 8.1 + OPcache
CentOS Stream 9の環境でPHP OPcacheをインストールしたときの覚書。
CentOSの環境ではPHP OPcacheが自動でオンになると思ったらなってなかった。
参考: FreeBSD14 + PHP8.3 + OPcache
環境: CentOS Stream 9, nginx 1.20.1, PHP 8.1.27
1. OPcacheのインストール
まずはインストールされているか確認。
# php -i | grep opcache
dnfでインストール。
# dnf search opcache
# dnf install php-opcache
iniファイルの場所を確認。
# php --ini
php infoでも確認。
# php -i | grep opcache
opcache.blacklist_filename => /etc/php.d/opcache*.blacklist => /etc/php.d/opcache*.blacklistopcache.consistency_checks => 0 => 0opcache.dups_fix => Off => Offopcache.enable => On => Onopcache.enable_cli => On => Onopcache.enable_file_override => Off => Offopcache.error_log => no value => no valueopcache.file_cache => no value => no valueopcache.file_cache_consistency_checks => On => Onopcache.file_cache_only => Off => Offopcache.file_update_protection => 2 => 2opcache.force_restart_timeout => 180 => 180opcache.huge_code_pages => Off => Offopcache.interned_strings_buffer => 8 => 8opcache.jit => tracing => tracingopcache.jit_bisect_limit => 0 => 0opcache.jit_blacklist_root_trace => 16 => 16opcache.jit_blacklist_side_trace => 8 => 8opcache.jit_buffer_size => 0 => 0opcache.jit_debug => 0 => 0opcache.jit_hot_func => 127 => 127opcache.jit_hot_loop => 64 => 64opcache.jit_hot_return => 8 => 8opcache.jit_hot_side_exit => 8 => 8opcache.jit_max_exit_counters => 8192 => 8192opcache.jit_max_loop_unrolls => 8 => 8opcache.jit_max_polymorphic_calls => 2 => 2opcache.jit_max_recursive_calls => 2 => 2opcache.jit_max_recursive_returns => 2 => 2opcache.jit_max_root_traces => 1024 => 1024opcache.jit_max_side_traces => 128 => 128opcache.jit_prof_threshold => 0.005 => 0.005opcache.lockfile_path => /tmp => /tmpopcache.log_verbosity_level => 1 => 1opcache.max_accelerated_files => 10000 => 10000opcache.max_file_size => 0 => 0opcache.max_wasted_percentage => 5 => 5opcache.memory_consumption => 128 => 128opcache.opt_debug_level => 0 => 0opcache.optimization_level => 0x7FFEBFFF => 0x7FFEBFFFopcache.preferred_memory_model => no value => no valueopcache.preload => no value => no valueopcache.preload_user => no value => no valueopcache.protect_memory => Off => Offopcache.record_warnings => Off => Offopcache.restrict_api => no value => no valueopcache.revalidate_freq => 2 => 2opcache.revalidate_path => Off => Offopcache.save_comments => On => Onopcache.use_cwd => On => Onopcache.validate_permission => Off => Offopcache.validate_root => Off => Offopcache.validate_timestamps => On => On
FreeBSDの記事を参考にOPcacheの設定。
参考: FreeBSD14 + PHP8.3 + OPcache
# less /etc/php.d/10-opcache.ini
; OPcache拡張モジュールを有効化zend_extension=opcache.so[opcache]; OPcacheを有効にするopcache.enable=1; CLI版のPHPでも有効にする (WP-CLIやcronジョブが高速化)opcache.enable_cli=1; --- パフォーマンス最優先の本番設定 ---; ★最重要: ファイルのタイムスタンプチェックを無効化。本番環境でのパフォーマンスを最大化。; ※注意: テーマやプラグインの更新後は、必ずphp-fpmのリロードが必要です。opcache.validate_timestamps=0; --- メモリ関連 (12GB VM / WordPress向け) ---; OPcacheが使用する共有メモリ量(MB)。; WordPressはファイル数が多いため、256MBは堅実な出発点です。; ZFS ARCやDBとの共存を考え、過剰な割り当ては避けます。opcache.memory_consumption=512M; PHP内部の文字列を保持するためのメモリ量(MB)。; WordPressや多くのプラグインは文字列を多用するため、32MBを推奨。opcache.interned_strings_buffer=32M; キャッシュできるファイル数の上限。; WordPressコア + テーマ + 多数のプラグインを想定し、多めに設定します。; 20000あれば、ほとんどのサイトで不足することはありません。opcache.max_accelerated_files=20000; --- 互換性と安定性 (WordPress向け) ---; ★重要: コメントをキャッシュに含める。; WordPressはプラグインやテーマのヘッダー情報をファイルのコメントから読み取るため、これは必須です。opcache.save_comments=1; PHP 8.x のJIT(Just-In-Time)コンパイラを有効化。; 'tracing'モードはWebアプリケーションのパフォーマンスと安定性のバランスが最も良い。opcache.jit_buffer_size=128Mopcache.jit=tracing; --- その他 ---; メモリの浪費をチェックする頻度(秒)。デフォルトの60秒でOK。opcache.revalidation_freq=60
デフォルトでopcache.blacklist_filenameとopcache.huge_code_pagesの設定があったけど無視していい。
テストしてphp-fpmを再起動。
# php-fpm -t
# systemctl reload php-fpm
設定値を確認。
# php -i | grep opcache
前の記事を参考にopcacheの状況を可視化するツールをインストール。
参考: FreeBSD14 + PHP8.3 + OPcache