【SEO対策】PHPのOPCacheの更新チェックの頻度を下げるでサイトの表示速度の向上の為に、OPCacheの更新チェックの頻度を2秒から1日に変更してみた。

そもそもの話でOPCacheはどんな感じでキャッシュしているのだろう?という事が気になった。


OPCacheの説明文を改めて読むと、コンパイル済みのバイトコードを共有メモリに保持と記載されている。

メモリ上だとキャッシュを確認することは難しいなと思うが、デバック用にファイルに変更する事ができるらしい。


というわけで早速変更してみた。

環境

OS:Ubuntu 20.04

PHP:7.4.6 (cli)


はじめにphp.iniでOPCache用のディレクトリを設ける。

$ mkdir /var/tmp/php/opcache

次にOPCacheの設定を変更する

$ sudo nano /etc/php/7.4/cli/php.ini

下記のパラメータで先頭のセミコロンを外し、値を変更する

opcache.enable_cli=1
opcache.file_cache=/var/tmp/php/opcache
opcache.file_cache_only=1

値は下記のページを参考にした。

OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた - slideshare




PCを再起動して、設定が正しく変更されているか調べる。

$ php -r "phpinfo();" | grep opcache.
/etc/php/7.4/cli/conf.d/10-opcache.ini,
opcache.blacklist_filename => no value => no value
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 => /var/tmp/php/opcache => /var/tmp/php/opcache
opcache.file_cache_consistency_checks => 1 => 1
opcache.file_cache_only => 1 => 1
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 => 0 => 0
opcache.restrict_api => no value => no value
opcache.revalidate_freq => 2 => 2
opcache.revalidate_path => Off => Off
opcache.save_comments => 1 => 1
opcache.use_cwd => On => On
opcache.validate_permission => Off => Off
opcache.validate_root => Off => Off
opcache.validate_timestamps => On => On

/home/saito/hoge.php

<?php
echo "hello world!";

このコードを端末から実行してみる。

$ php /home/saito/hoge.php

実行後にopcache.file_cacheで指定したディレクトリを確認してみたら、

/var/tmp/php/opcache/c81eb7575d6d7b973f435e47730eefff/home/saito/hoge.php.bin

ハッシュ値?とファイルパス.binのファイルが生成されていた。




このファイルをバイナリエディタで開いてみる。

$ sudo apt update
$ sudo apt install hexedit
$ hexedit /var/tmp/php/opcache/c81eb7575d6d7b973f435e47730eefff/home/saito/hoge.php.bin

出力内容は下記の通り

00000000 4F 50 43 41 43 48 45 00 63 38 31 65 62 37 35 37 OPCACHE.c81eb757
00000010   35 64 36 64  37 62 39 37  33 66 34 33  35 65 34 37  5d6d7b973f435e47
00000020   37 33 30 65  65 66 66 66  B8 02 00 00  00 00 00 00  730eefff........
00000030   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00000040   61 A1 4D 5F  00 00 00 00  08 42 04 CD  41 7F 00 00  a.M_.....B..A...
00000050   C0 01 00 00  00 00 00 00  02 00 00 00  00 00 40 02  ..............@.
00000060   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00000070   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00000080   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00000090   00 00 00 00  02 00 00 00  48 02 00 00  00 00 00 00  ........H.......
000000A0   00 00 00 00  00 00 00 00  60 10 A8 CA  41 7F 00 00  ........`...A...
000000B0   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
000000C0   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
000000D0   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
000000E0   88 02 00 00  00 00 00 00  01 00 00 00  03 00 00 00  ................
000000F0   00 00 00 00  00 00 00 00  02 00 00 00  00 00 00 00  ................
00000100   00 02 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00000110   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00000120   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00000130   00 00 00 00  00 00 00 00  01 00 00 00  17 00 00 00  ................
00000140   18 00 00 00  FE FF FF FF  00 00 00 00  00 00 00 00  ................
00000150   00 00 00 00  00 00 00 00  08 00 00 00  00 00 00 00  ................
00000160   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00000170   01 00 00 00  17 00 00 00  18 00 00 00  FE FF FF FF  ................
00000180   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00000190   08 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
000001A0   00 00 00 00  00 00 00 00  FF FF FF FF  00 00 00 00  ................
000001B0   00 00 00 00  00 00 00 00  01 00 00 00  00 00 00 00  ................
000001C0   61 A1 4D 5F  00 00 00 00  01 00 00 00  00 00 00 00  a.M_............
000001D0   00 00 00 00  00 00 00 00  B8 02 00 00  00 00 00 00  ................
000001E0   00 02 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
000001F0   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00000200   00 00 00 00  81 39 63 0F  D8 A2 4D 5F  00 00 00 00  .....9c...M_....
00000210   03 00 00 00  46 00 00 00  14 39 0A 30  DD 82 B5 F7  ....F....9.0....
00000220   14 00 00 00  00 00 00 00  2F 68 6F 6D  65 2F 73 61  ......../home/sa
00000230   69 74 6F 2F  68 6F 67 65  2E 70 68 70  00 7F 00 00  ito/hoge.php....
00000240   38 32 A0 CA  41 7F 00 00  40 32 A0 CA  41 7F 00 00  82..A...@2..A...
00000250   20 02 00 00  00 00 00 00  06 00 00 00  00 00 00 00   ...............
00000260   01 00 00 00  00 00 00 00  04 00 00 00  00 00 00 00  ................
00000270   01 00 00 00  46 00 00 00  02 E1 8A DF  5A 3A 1C D3  ....F.......Z:..
00000280   0C 00 00 00  00 00 00 00  68 65 6C 6C  6F 20 77 6F  ........hello wo
00000290   72 6C 64 21  00 7F 00 00  17 08 00 00  00 00 00 00  rld!............
000002A0   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
000002B0   02 00 00 00  88 01 00 00  41 05 00 00  00 00 00 00  ........A.......
000002C0   01 00 00 00  00 00 00 00  00 00 00 00  FF FF FF FF  ................
000002D0   03 00 00 00  3E 01 00 00  01 00 00 00  46 00 00 00  ....>.......F...
000002E0   14 39 0A 30  DD 82 B5 F7  14 00 00 00  00 00 00 00  .9.0............
000002F0   2F 68 6F 6D  65 2F 73 61  69 74 6F 2F  68 6F 67 65  /home/saito/hoge
00000300   2E 70 68 70  00 7F 00 00                            .php....

16進法の数字の羅列が出力された。


よくわからないけれども、これはPHPのオペコードを更にコンパイルしたものなのかな?

VLDでPHPのオペコードを確認する