【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のオペコードを更にコンパイルしたものなのかな?