PHP-FPM8.4のOPcacheとJITの有効化設定方法と解説


PHP-FPM8.4のOPcacheとJITの設定方法
設定の記載場所や考え方などを解説します。
ちなみにOPcacheはデフォルトで有効化されているので、
そのまま使うとちょっと危険。
<環境>
・PHP:8.4.3
・Ubuntu 24.04.1 LTS
OPcacheの設定
<設定ファイル>
/etc/php/8.4/fpm/php.ini
<下記をコメントアウトして記述>
[opcache]
opcache.enable=1
opcache.enable_cli=0
memory_consumption=128
opcache.interned_strings_buffer=96
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=120
opcache.save_comments=0
opcache.blacklist_filename=/etc/php/8.4/fpm/opcache.blacklist //ファイルは自分で作成
それぞれ解説します。
opcache.enable
デフォルトで有効ですが、一応「1」で有効に。
opcache.enable_cli
コマンドラインからPHP-FPMを実行するときにOPcacheを有効にするかどうか。
デフォルトでは「0」で無効にされていますが念のため。
memory_consumption
OPcacheで使う共有メモリのサイズです。
デフォルトは128MB。サイトによって消費量が違うのでステータスを要確認。
とりあえず128MBで良い。
opcache.interned_strings_buffer
キャッシュする文字列(インターンされた文字列)を格納する容量。
デフォルトは「8」ですが、足りないことが多い。
文字が多いファイルを多量にインクルードする場合は大幅に増やす。
自分の場合は「96」が最適でした。
この容量は「memory_consumption」の中身となるので、
ここで96MB使うと残りは32MBしかないので注意。
opcache.max_accelerated_files
キャッシュするファイルの最大数です。
PHPで読み込む総ファイル数と考えていい。
デフォルトの「10000」で問題無いだろう。
opcache.validate_timestamps
キャッシュしたファイルのタイムスタンプを確認するかどうか?です。
読み込むファイルの中身が更新される場合は「1」にして確認有効化を。
デフォルトも「1」です。
opcache.revalidate_freq
タイムスタンプを確認する頻度(秒間)です。
この秒数ごとにファイルのタイムスタンプを確認し、
変わっていれば再度キャッシュします。
デフォルトは「2」と早すぎるので、60以上にしたい。
opcache.save_comments
キャッシュするファイルに記載されているコメントを、
キャッシュする際に削除するかどうか?
「0」にするとコメントを削除するので容量が少なくなりメモリ消費も抑えられる。
誤作動やデバッグの心配なら「1」を。
opcache.save_comments
キャッシュしないファイルを書いたファイルパスを書きます。
例えば「/etc/php/8.4/fpm/opcache.blacklist」とファイルを作成し、
/var/html/doudonn.com/abc/
/var/html/doudonn.com/def/
と書いてキャッシュしないファイルを指定します。
即時更新が必須なファイルや、毎回中身が違うファイルを指定したい。
JITの設定
<設定ファイル>
/etc/php/8.4/mods-available/10-opcache.ini
<デフォルト状態>
; configuration for php opcache module
; priority=10
zend_extension=opcache.so
opcache.jit=off
<下記に変更してJITを有効化する>
; configuration for php opcache module
; priority=10
zend_extension=opcache.so
opcache.jit = tracing
opcache.jit_buffer_size = 16M
php.iniではなく、モジュールのファイルに書きます。
ここに「opcache.jit=off」と書いてあるので仕方ない。
opcache.jit
JITを有効にするかどうかの項目。
「tracing」が一番効果のある設定らしい。
opcache.jit_buffer_size
JITに使うメモリ量。
サイトにより違ってくる。
デフォルトは「0」で無効の状態なので指定が必須。
自分は16MBにしていますが、1MBでも十分だった。
--
JITはこれだけで有効になります。
その他も細かい設定はありますがデフォルトで良いだろう。
JITは時間のかかる処理にだけ有効です。
簡単なプログラムで処理が早い場合はほぼJITは使われない。
当サイトの場合はほぼ無意味。やるだけリスクでしかない状態。
ワードプレス等は有効ですが、
自作システムなど軽いものにJITは期待してはいけない。
状況を確認する方法
「opcache-gui」を使って確認するのがおすすめ
そのgithubからダウンロードできる「index.php」をサーバーにアップロードして開くと、
OPcacheのステータスを見やすく確認できる。
例えば「https://doudonn.com/opc/index.php」にアップロードし、アクセス。
当然名前の変更やセキュリティは必須。
Basic認証やIP制限等をしておこう。
最後に
OPcacheは全部のファイルをメモリに保存すると考える。
読み込んだファイルはほぼ全てキャッシュします。
拡張子がphpはもちろん、txtでもキャッシュする。
そのため、ディスクの読み取りはほぼ無くなり速くなる。
注意なのはキャッシュされたファイルを使われ続けるという点。
タイムスタンプを確認しない設定にすると最初のキャッシュをずっと使われます。
ワードプレスならテンプレートファイル等を除外する手もありますが、
タイムスタンプを確認する設定にするのが無難。
というところで、理解して使わないと危険なのがOPcache。
よく調べてから設定してください。