mirror of
https://github.com/php/php-src.git
synced 2024-12-11 10:54:47 +08:00
aaae3637e0
since it was pretty confusing before
229 lines
9.2 KiB
Plaintext
229 lines
9.2 KiB
Plaintext
The Zend OPcache
|
|
================
|
|
|
|
The Zend OPcache provides faster PHP execution through opcode caching and
|
|
optimization. It improves PHP performance by storing precompiled script
|
|
bytecode in the shared memory. This eliminates the stages of reading code from
|
|
the disk and compiling it on future access. In addition, it applies a few
|
|
bytecode optimization patterns that make code execution faster.
|
|
|
|
Compatibility
|
|
-------------
|
|
|
|
This version of Zend OPcache is compatible with PHP 5.2.*, 5.3.*, 5.4.*
|
|
and PHP-5.5 development branch. PHP 5.2 support may be removed in the future.
|
|
|
|
Quick Install
|
|
-------------
|
|
|
|
- Compile
|
|
|
|
$PHP_DIR/bin/phpize
|
|
./configure \
|
|
--with-php-config=$PHP_DIR/bin/php-config
|
|
make
|
|
|
|
- Install
|
|
|
|
make install # this will copy opcache.so into PHP extension directory
|
|
|
|
- Edit php.ini
|
|
|
|
zend_extension=/...full path.../opcache.so
|
|
|
|
NOTE: In case you are going to use Zend OPcache together with Xdebug or Zend Debugger,
|
|
be sure that the debugger is loaded after OPcache. "php -v" must show the debugger
|
|
after OPcache.
|
|
|
|
- Restart PHP
|
|
|
|
Speed Tuning
|
|
-------------
|
|
|
|
We recommend the following configuration options for best performance
|
|
in a production environment.
|
|
|
|
opcache.memory_consumption=128
|
|
opcache.interned_strings_buffer=8
|
|
opcache.max_accelerated_files=4000
|
|
opcache.revalidate_freq=60
|
|
opcache.enable_cli=1
|
|
|
|
You also may add the following, but it may break some applications and
|
|
frameworks. Please, read description of these directives and add them on your
|
|
own risk.
|
|
|
|
opcache.save_comments=0
|
|
opcache.enable_file_override=1
|
|
|
|
In some cases you may like to prefer enabling/disabling some features
|
|
to avoid incompatibilities at the cost of some performance degradation.
|
|
|
|
For development environment we would recommend setting opcache.revalidate_freq
|
|
into 0.
|
|
|
|
Configuration Directives
|
|
------------------------
|
|
|
|
opcache.enable (default "1")
|
|
OPcache On/Off switch. When set to Off, code is not optimized and cached.
|
|
|
|
opcache.enable_cli (default "0")
|
|
Enables the OPcache for the CLI version of PHP. It's mostly for testing
|
|
and debugging.
|
|
|
|
opcache.memory_consumption (default "64")
|
|
The OPcache shared memory storage size. The amount of memory for storing
|
|
precompiled PHP code in Mbytes.
|
|
|
|
opcache.interned_strings_buffer (default "4")
|
|
The amount of memory for interned strings in Mbytes.
|
|
|
|
opcache.max_accelerated_files (default "2000")
|
|
The maximum number of keys (scripts) in the OPcache hash table.
|
|
The number is actually the first one in the following set of prime
|
|
numbers that is bigger than the one supplied: { 223, 463, 983, 1979, 3907,
|
|
7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793 }. Only numbers
|
|
between 200 and 1000000 are allowed.
|
|
|
|
opcache.max_wasted_percentage (default "5")
|
|
When the cache fills up this setting decides when to actually reset (dump
|
|
all entries) it. At the default of 5% it means that if less than 5% of
|
|
the entries in the now full cache are wasted/orphaned, then you have a good
|
|
active cache. There is no point emptying a cache full of good entries
|
|
only to most likely refill it with those same entries. Once more than 5%
|
|
of the cache consists of wasted entries, the cache will reset in this
|
|
cache-full scenario. This can be set up to as high as 50%.
|
|
|
|
opcache.use_cwd (default "1")
|
|
When this directive is enabled, the OPcache appends the current working
|
|
directory to the script key, thus eliminating possible collisions between
|
|
files with the same name (basename). Disabling the directive improves
|
|
performance, but may break existing applications.
|
|
|
|
opcache.validate_timestamps (default "1")
|
|
When disabled, you must reset the OPcache manually or restart the
|
|
webserver for changes to the filesystem to take effect.
|
|
The frequency of the check is controlled by the directive
|
|
"opcache.revalidate_freq".
|
|
|
|
opcache.validate_permission (default "0")
|
|
Leads OPcache to check file readability on each access to cached file.
|
|
This directive should be enabled in shared hosting environment, when few
|
|
users (PHP-FPM pools) reuse the common OPcache shared memory.
|
|
|
|
opcache.validate_root (default "0")
|
|
This directive prevents file name collisions in different "chroot"
|
|
environments. It should be enabled for sites that may serve requests in
|
|
different "chroot" environments.
|
|
|
|
opcache.revalidate_freq (default "2")
|
|
How often (in seconds) to check file timestamps for changes to the shared
|
|
memory storage allocation. ("1" means validate once per second, but only
|
|
once per request. "0" means always validate)
|
|
|
|
opcache.file_update_protection (default "2")
|
|
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 setting it
|
|
to "0".
|
|
|
|
opcache.revalidate_path (default "0")
|
|
Enables or disables file search in include_path optimization
|
|
If the file search is disabled and a cached file is found that uses
|
|
the same include_path, the file is not searched again. Thus, if a file
|
|
with the same name appears somewhere else in include_path, it
|
|
won't be found. Enable this directive if this optimization has an effect on
|
|
your applications. The default for this directive is disabled, which means
|
|
that optimization is active.
|
|
|
|
opcache.save_comments (default "1")
|
|
If disabled, all PHPDoc comments are dropped from the code to reduce the
|
|
size of the optimized code. Disabling "Doc Comments" may break some
|
|
existing applications and frameworks (e.g. Doctrine, ZF2, PHPUnit)
|
|
|
|
opcache.enable_file_override (default "0")
|
|
Allow file existence override (file_exists, etc.) performance feature.
|
|
|
|
opcache.optimization_level (default "0xffffffff")
|
|
A bitmask, where each bit enables or disables the appropriate OPcache
|
|
passes
|
|
|
|
opcache.inherited_hack (default "1")
|
|
Enable this hack as a workaround for "Cannot redeclare class" errors.
|
|
The OPcache stores the places where DECLARE_CLASS opcodes use
|
|
inheritance (These are the only opcodes that can be executed by PHP,
|
|
but which may not be executed because the parent class is missing due to
|
|
optimization). When the file is loaded, OPcache tries to bind the
|
|
inherited classes by using the current environment. The problem with this
|
|
scenario is that, while the DECLARE_CLASS opcode may not be needed for the
|
|
current script, if the script requires that the opcode at least be defined,
|
|
it may not run. The default for this directive is disabled, which means
|
|
that optimization is active. In php-5.3 and above this hack is not needed
|
|
anymore and this setting has no effect.
|
|
|
|
opcache.dups_fix (default "0")
|
|
Enable this hack as a workaround for "Cannot redeclare class" errors.
|
|
|
|
opcache.blacklist_filename
|
|
The location of the OPcache blacklist file (wildcards allowed).
|
|
Each OPcache blacklist file is a text file that holds the names of files
|
|
that should not be accelerated. The file format is to add each filename
|
|
to a new line. The filename may be a full path or just a file prefix
|
|
(i.e., /var/www/x blacklists all the files and directories in /var/www
|
|
that start with 'x'). Line starting with a ; are ignored (comments).
|
|
Files are usually triggered by one of the following three reasons:
|
|
1) Directories that contain auto generated code, like Smarty or ZFW cache.
|
|
2) Code that does not work well when accelerated, due to some delayed
|
|
compile time evaluation.
|
|
3) Code that triggers an OPcache bug.
|
|
|
|
opcache.max_file_size (default "0")
|
|
Allows exclusion of large files from being cached. By default all files
|
|
are cached.
|
|
|
|
opcache.consistency_checks (default "0")
|
|
Check the cache checksum each N requests.
|
|
The default value of "0" means that the checks are disabled.
|
|
Because calculating the checksum impairs performance, this directive should
|
|
be enabled only as part of a debugging process.
|
|
|
|
opcache.force_restart_timeout (default "180")
|
|
How long to wait (in seconds) for a scheduled restart to begin if the cache
|
|
is not being accessed.
|
|
The OPcache uses this directive to identify a situation where there may
|
|
be a problem with a process. After this time period has passed, the
|
|
OPcache assumes that something has happened and starts killing the
|
|
processes that still hold the locks that are preventing a restart.
|
|
If the log level is 3 or above, a "killed locker" error is recorded
|
|
in the Apache logs when this happens.
|
|
|
|
opcache.error_log
|
|
OPcache error_log file name. Empty string assumes "stderr".
|
|
|
|
opcache.log_verbosity_level (default "1")
|
|
All OPcache errors go to the Web server log.
|
|
By default, only fatal errors (level 0) or errors (level 1) are logged.
|
|
You can also enable warnings (level 2), info messages (level 3) or
|
|
debug messages (level 4).
|
|
|
|
opcache.preferred_memory_model
|
|
Preferred Shared Memory back-end. Leave empty and let the system decide.
|
|
|
|
opcache.protect_memory (default "0")
|
|
Protect the shared memory from unexpected writing during script execution.
|
|
Useful for internal debugging only.
|
|
|
|
opcache.restrict_api (default "")
|
|
Allows calling OPcache API functions only from PHP scripts which path is
|
|
started from specified string. The default "" means no restriction.
|
|
|
|
opcache.mmap_base
|
|
Mapping base of shared memory segments (for Windows only). All the PHP
|
|
processes have to map shared memory into the same address space. This
|
|
directive allows to manually fix the "Unable to reattach to base address"
|
|
errors.
|
|
|
|
opcache.lockfile_path (default "/tmp")
|
|
Absolute path used to store shared lockfiles (for *nix only)
|