端くれプログラマの備忘録 PHP [PHP] OPCacheのキャッシュクリアのタイミング

[PHP] OPCacheのキャッシュクリアのタイミング

PHPのOPcacheは、スクリプトのコンパイル済みコードをキャッシュして実行パフォーマンスを向上させます。ただし、特定のタイミングでキャッシュがクリアされることがあります。以下がその主なタイミングです:


1. スクリプトの変更時

  • OPcacheはスクリプトがディスク上で変更されたかどうかを検出する設定(opcache.validate_timestamps)に基づいて動作します。
  • デフォルトで有効(opcache.validate_timestamps=1)の場合、opcache.revalidate_freq(再検証間隔)の設定値に従ってスクリプトの変更を定期的にチェックします。
    • 変更が検出されると、そのスクリプトのキャッシュがクリアされ、新しいバージョンがキャッシュされます。
  • opcache.validate_timestamps=0(変更チェック無効)の場合、スクリプトを手動でキャッシュクリアしない限り更新されません。

2. OPcacheのリセット(手動クリア)

  • 手動でキャッシュをクリアした場合、全てのスクリプトが再キャッシュされます。主な方法:
    • PHPの関数を使用:
      php opcache_reset();
    • 管理ツール(opcache-gui など)を使用。
  • サーバーの再起動でもキャッシュはクリアされます。

3. OPcacheの有効期限

  • キャッシュされたスクリプトが有効期限切れになった場合(opcache.max_accelerated_filesなどの設定に依存)。
  • OPcacheのメモリが不足して新しいスクリプトをキャッシュするために古いスクリプトが削除される場合。

4. PHPプロセスの再起動

  • PHP-FPMやApacheなどのウェブサーバーでPHPプロセスを再起動すると、OPcacheもリセットされます。

5. 特定の構成変更

  • OPcache関連のPHP設定(php.ini)を変更し、ウェブサーバーやPHP-FPMを再起動するとキャッシュがクリアされます。

注意点

opcache.validate_timestampsを無効化している場合、スクリプトを変更してもキャッシュが更新されません。その場合は手動でクリアする必要があります。

必要に応じて設定を調整し、キャッシュクリアのタイミングを管理することで、パフォーマンスと利便性をバランスよく保つことができます。