SunshinePHP 2019

実行時設定

php.ini の設定により動作が変化します。

OPcache 設定オプション
名前 デフォルト 変更可能 変更履歴
opcache.enable "1" PHP_INI_ALL  
opcache.enable_cli "0" PHP_INI_SYSTEM  
opcache.memory_consumption "64" PHP_INI_SYSTEM  
opcache.interned_strings_buffer "4" PHP_INI_SYSTEM  
opcache.max_accelerated_files "2000" PHP_INI_SYSTEM  
opcache.max_wasted_percentage "5" PHP_INI_SYSTEM  
opcache.use_cwd "1" PHP_INI_SYSTEM  
opcache.validate_timestamps "1" PHP_INI_ALL  
opcache.revalidate_freq "2" PHP_INI_ALL  
opcache.revalidate_path "0" PHP_INI_ALL  
opcache.save_comments "1" PHP_INI_SYSTEM  
opcache.load_comments "1" PHP_INI_ALL PHP 7.0.0 で削除されました
opcache.fast_shutdown "0" PHP_INI_SYSTEM PHP 7.2.0 で削除されました
opcache.enable_file_override "0" PHP_INI_SYSTEM  
opcache.optimization_level "0x7FFFBFFF" PHP_INI_SYSTEM PHP 5.6.18 で 0xFFFFBFFF から変更されました
opcache.inherited_hack "1" PHP_INI_SYSTEM  
opcache.dups_fix "0" PHP_INI_ALL  
opcache.blacklist_filename "" PHP_INI_SYSTEM  
opcache.max_file_size "0" PHP_INI_SYSTEM  
opcache.consistency_checks "0" PHP_INI_ALL  
opcache.force_restart_timeout "180" PHP_INI_SYSTEM  
opcache.error_log "" PHP_INI_SYSTEM  
opcache.log_verbosity_level "1" PHP_INI_SYSTEM  
opcache.preferred_memory_model "" PHP_INI_SYSTEM  
opcache.protect_memory "0" PHP_INI_SYSTEM  
opcache.mmap_base NULL PHP_INI_SYSTEM  
opcache.restrict_api "" PHP_INI_SYSTEM  
opcache.file_update_protection "2" PHP_INI_ALL  
opcache.huge_code_pages "0" PHP_INI_SYSTEM  
opcache.lockfile_path "/tmp" PHP_INI_SYSTEM  
opcache.opt_debug_level "0" PHP_INI_SYSTEM  
opcache.file_cache NULL PHP_INI_SYSTEM PHP 7.0.0 以降で利用可能
opcache.file_cache_only "0" PHP_INI_SYSTEM PHP 7.0.0 以降で利用可能
opcache.file_cache_consistency_checks "1" PHP_INI_SYSTEM PHP 7.0.0 以降で利用可能
opcache.file_cache_fallback "1" PHP_INI_SYSTEM PHP 7.0.0 以降で利用可能
opcache.validate_permission "0" PHP_INI_SYSTEM PHP 7.0.14 以降で利用可能
opcache.validate_root "0" PHP_INI_SYSTEM PHP 7.0.14 以降で利用可能
PHP_INI_* モードの詳細および定義については どこで設定を行うのか を参照してください。

以下に設定ディレクティブに関する 簡単な説明を示します。

opcache.enable boolean

オペコード・キャッシュを有効にします。 無効にした場合、コードは最適化もキャッシュもされません。 opcache.enable の設定を、実行時に ini_set() で有効化することはできません。 実行時にできるのは、無効化だけです。スクリプト内で有効化しようとすると、警告が発生します。

opcache.enable_cli boolean

PHP の CLI 版に対してオペコード・キャッシュを有効にします。

opcache.memory_consumption integer

OPcache によって使用される共有メモリ・ストレージのサイズ。( MB 単位)

opcache.interned_strings_buffer integer

インターン (intern) された文字列を格納するために使用されるメモリ量。( MB 単位) この設定ディレクティブの値は、PHP 5.3.0 未満では無視されます。

opcache.max_accelerated_files integer

OPcache ハッシュテーブルのキー(すなわちスクリプト)の最大数。 使用される現時点の値は、 素数の集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } のうち、 設定値以上の最初の数値です。 最小値は 200 です。最大値は、PHP 5.5.6 より前のバージョンでは 100000、PHP 5.5.6 以降では 1000000 となります。

opcache.max_wasted_percentage integer

再起動がスケジュールされるまでに許される、無駄なメモリの最大の割合。

opcache.use_cwd boolean

有効にすると、OPcache は現行の作業ディレクトリをスクリプト・キーに追加します。 その方法によって、同じ基底名を持つファイル同士で起こりうる衝突を回避します。 このディレクティブを無効にするとパフォーマンスが向上しますが、既存のアプリケーションを破壊するかもしれません。

opcache.validate_timestamps boolean

有効にすると、OPcache は、スクリプトが更新されたか opcache.revalidate_freq 秒ごとにチェックします。 このディレクティブが無効な場合、ファイルシステムへの変更を反映するには、 opcache_reset() または opcache_invalidate() 関数を介して、 または Web サーバを再起動して手動で OPcache をリセットしなければいけません。

opcache.revalidate_freq integer

更新のためにスクリプトのタイムスタンプをチェックする頻度。(秒単位) 0 にすると、OPcache は、リクエストごとに更新をチェックします。

この設定ディレクティブは、 opcache.validate_timestamps が無効の場合、 無視されます。

opcache.revalidate_path boolean

無効にすると、 同一の include_path を使用する、 キャッシュされた既存のファイルが再利用されます。 したがって、同じ名前を持つファイルが include_path の他の部分にあると、それは見つかりません。

opcache.save_comments boolean

無効にすると、最適化したコードのサイズを減らすために OPcode キャッシュからすべてのドキュメンテーション・コメントが廃棄されます。 この設定ディレクティブを無効にすると、注釈のためにコメント・パースに依存するアプリケーションおよびフレームワークを破壊するかもしれません。 それには、Doctrine、Zend Framework 2 および PHPUnit が含まれます。

opcache.load_comments boolean

無効にすると、たとえ存在していても、ドキュメンテーション・コメントはオペコード・キャッシュから読み込まれません。 これは、それらを必要とするアプリケーションでコメントを読み込むためだけに opcache.save_comments と一緒に使用できます。

opcache.fast_shutdown boolean

有効にすると、それぞれに割り当てられたブロックを解放しない、高速シャットダウン・シーケンスが使用されます。 しかし、リクエスト変数のすべてのセットをひとまとめに割当てを解除することは、Zend Engine のメモリ・マネージャに依存します。

このディレクティブは、PHP 7.2.0 で削除されました。 A variant of the fast shutdown sequence has been integrated into PHP and will be automatically used if possible.

opcache.enable_file_override boolean

有効にすると、file_exists()is_file() および is_readable() が呼ばれた際に、 ファイルが既にキャッシュ済みかどうかをオペコード・キャッシュからチェックします。 これは、PHP スクリプトの存在および読み込み可能かをチェックするアプリケーションのパフォーマンスを改善させるかもしれません。 しかし、opcache.validate_timestamps が無効な場合に、 陳腐化した結果を返す危険があります。

opcache.optimization_level integer

どの最適化パスが実行されるかコントロールするビットマスク。

opcache.inherited_hack boolean

PHP 5.3 未満では、OPcache は DECLARE_CLASS オペコードが継承を使用した場所を保存します。 ファイルが読み込まれる際に、OPcache は現行の環境を使用して継承クラスをバインドしようとします。 DECLARE_CLASS オペコードが現行のスクリプトで不要かもしれない時に問題です。 オペコードが定義されていることをスクリプトが必要とする場合、それは実行できないかもしれません。

この設定ディレクティブの値は、PHP 5.3 以降では無視されます。

opcache.dups_fix boolean

"Cannot redeclare class" (クラスを再宣言できません)というエラーを回避する目的でのみ、このハックを有効にするべきです。

opcache.blacklist_filename string

OPcache ブラックリスト・ファイルの場所。 ブラックリスト・ファイルは、高速化すべきではないファイルの名前を 1 行につき 1 つ含むテキストファイルです。 ワイルドカードが許されます。そして、プレフィックスも提示できます。 セミコロンで始まる行は、コメントとして無視されます。

簡単なブラックリスト・ファイルは、以下の通りかもしれません。

; 特定のファイルに一致します。
/var/www/broken.php
; x で始まるすべてのファイルに一致するプレフィックス
/var/www/x
; ワイルドカード一致です。
/var/www/*-broken.php
opcache.max_file_size integer

キャッシュできるファイル・サイズの最大。(バイト単位) これが 0 の場合、すべてのファイルがキャッシュされます。

opcache.consistency_checks integer

ゼロ以外の場合、OPcache は、リクエスト N 回毎にキャッシュのチェックサムを検証します。 N は、この設定ディレクティブの値です。 パフォーマンスを損なうので、これはデバッグ時のみ有効にすべきです。

opcache.force_restart_timeout integer

キャッシュがアクティブではない場合に、スケジュールされた再起動が始まるのを待つ時間の長さ。(秒単位) タイムアウトに達すると、OPcache は何か具合が悪いとみなして、リスタートできるようにするためにキャッシュのロックを所持する処理を殺します。

opcache.log_verbosity_level が 2 以上の場合、警告発生時にエラーログに記録されます。

opcache.error_log string

エラーに対するエラーログ。 空の文字列は、stderr と同様に扱われ、 結果として標準エラー(ほとんどの場合、Web サーバーのエラーログです)に送られるログになります。

opcache.log_verbosity_level integer

ログ冗長レベルです。 デフォルトでは、致命的エラー(レベル 0 )およびエラー(レベル 1 )だけが記録されます。 利用できる他のレベルは、警告(レベル 2 )、情報メッセージ(レベル 3 )およびデバッグ・メッセージ(レベル 4 )です。

opcache.preferred_memory_model string

OPcache が使用する優先のメモリ・モデル。 空のままにすると、OPcache は最も適切なモデルを選びます。 それは実質的にすべての場合に正しいふるまいです。

可能な値には、mmapshmposix および win32 があります。

opcache.protect_memory boolean

スクリプト実行中に予期しない書込みから共有メモリを保護する。 これは、内部のデバッギングだけに役立ちます。

opcache.mmap_base string

Windows 上で共有メモリ・セグメントに使用される基底。 すべての PHP 処理は、共有メモリを同じアドレス空間にマップしなければいけません。 このディレクティブを使用すると、"Unable to reattach to base address" (基底アドレスに再アタッチできません) というエラーを修復できます。

opcache.restrict_api string

OPcache API 関数の呼び出しを、指定した文字列から始まるパス上の PHP スクリプトからだけに制限します。 デフォルトは "" で、これは、何も制限しないことを意味します。

opcache.file_update_protection string

Prevents caching files that are less than this number of seconds old. It protects from caching of incompletely updated files. In case all file updates on your site are atomic, you may increase performance by setting it to "0".

opcache.huge_code_pages string

Enables or disables copying of PHP code (text segment) into HUGE PAGES. This should improve performance, but requires appropriate OS configuration.

opcache.lockfile_path string

共用ロックファイルを格納する絶対パス (*nix のみ)

opcache.opt_debug_level string

Produces opcode dumps for debugging different stages of optimizations. 0x10000 will output opcodes as the compiler produced them before any optimization occurs while 0x20000 will output optimized codes.

opcache.file_cache string

ファイルベースのセカンドレベル opcode キャッシュを有効にし、そのディレクトリを設定します。 これは共有メモリ上の opcode キャッシュがいっぱいの時やサーバ再起動時、 もしくは共有メモリ上の opcode キャッシュをリセットした場合のパフォーマンスを向上させます。 デフォルトは "" で、これはファイルベースのキャッシュを無効にします。

opcache.file_cache_only boolean

共有メモリ内でのオペコード・キャッシュを有効あるいは無効にします。

opcache.file_cache_consistency_checks boolean

ファイルキャッシュから読み込んだスクリプトのチェックサムの検証を有効あるいは無効にします。

opcache.file_cache_fallback boolean

共有メモリへの再アタッチに失敗するプロセスについて、 opcache.file_cache_only=1 であるものとみなします (Windows のみ)。 ファイルキャッシュを明示的に有効にする必要があります。

opcache.validate_permission boolean

キャッシュされたファイルのアクセス権限を現在のユーザーに対して検証します。

opcache.validate_root boolean

chroot された環境での名前の衝突を防止します。 これは、chroot 以外でのファイルへのアクセスを防止するために、 chroot されたすべての環境で有効にする必要があります。

add a note add a note

User Contributed Notes 7 notes

up
6
damien at overeem dot org
1 year ago
When using PHP on a windows platform and enabling opcache, you might run into occasional 500 errors. These will appear to show up entirely random.

When this happens, your windows Event log (Windows Logs/Application) will show (probably multiple)  entries from Zend OPcache with Event ID 487. Further information will state the following error message: "Base address marks unusable memory region".

This issue can be resolved by adding the following to your php.ini:

    opcache.mmap_base = 0x20000000

Unfortunately I do not know the significance of the value "0x20000000". I can only tell you that this value works to solve the problem (Tried and tested)
up
2
bdurand at ensemblegroup dot net
1 year ago
It would appear as though the [opcache.enable] setting is indeed NOT PHP_INI_ALL.
For changing it within user.ini yields no effect when disabled at global level. user.ini is ignored for that setting.
up
1
wessos at example dot org
5 days ago
The optimization levels as of php 7.3 are the following:

#define ZEND_OPTIMIZER_PASS_1        (1<<0)   /* CSE, STRING construction     */
#define ZEND_OPTIMIZER_PASS_2        (1<<1)   /* Constant conversion and jumps */
#define ZEND_OPTIMIZER_PASS_3        (1<<2)   /* ++, +=, series of jumps      */
#define ZEND_OPTIMIZER_PASS_4        (1<<3)   /* INIT_FCALL_BY_NAME -> DO_FCALL */
#define ZEND_OPTIMIZER_PASS_5        (1<<4)   /* CFG based optimization       */
#define ZEND_OPTIMIZER_PASS_6        (1<<5)   /* DFA based optimization       */
#define ZEND_OPTIMIZER_PASS_7        (1<<6)   /* CALL GRAPH optimization      */
#define ZEND_OPTIMIZER_PASS_8        (1<<7)   /* SCCP (constant propagation)  */
#define ZEND_OPTIMIZER_PASS_9        (1<<8)   /* TMP VAR usage                */
#define ZEND_OPTIMIZER_PASS_10        (1<<9)   /* NOP removal                 */
#define ZEND_OPTIMIZER_PASS_11        (1<<10)  /* Merge equal constants       */
#define ZEND_OPTIMIZER_PASS_12        (1<<11)  /* Adjust used stack           */
#define ZEND_OPTIMIZER_PASS_13        (1<<12)  /* Remove unused variables     */
#define ZEND_OPTIMIZER_PASS_14        (1<<13)  /* DCE (dead code elimination) */
#define ZEND_OPTIMIZER_PASS_15        (1<<14)  /* (unsafe) Collect constants */
#define ZEND_OPTIMIZER_PASS_16        (1<<15)  /* Inline functions */

Source: https://lxr.room11.org/xref/php-src%40master/ext/opcache/Optimizer/zend_optimizer.h
up
-1
paul dot lindgreen at msvu dot ca
4 months ago
Is opcache.memory_consumption limited by max_memory? If not what limitations are there, can you have too much?
up
-4
jpokress at gmail dot com
2 years ago
Windows PHP 7 users PLEASE NOTE:

You need to add the following line to your php.ini file in order for opcache to be loaded:

zend_extension=php_opcache.dll

This was missing from the stock php.ini file in the distribution I obtained. Credit:

http://stackoverflow.com/questions/19495935/php-5-5-opcache-not-working-on-apache
up
-8
Tizian Schmidlin st at cabag dot ch
3 years ago
When running PHP on Windows, you need to be running the Webservice (Apache or IIS) as a local administrator in order to allow PHP to create a shared memory segment. If you run your webservice as anything else, OPCache will simply be disabled.
up
-8
BR
3 years ago
opcache.max_wasted_percentage must have a value between 1 and 50. Otherwise it will automatically set the variable 5 %.
To Top