Note: You are currently viewing documentation for Moodle 2.9. Up-to-date documentation for the latest stable version of Moodle may be available here: OPcache.

OPcache

From MoodleDocs
Revision as of 00:56, 3 October 2014 by B Johnson (talk | contribs) (Add note that opcode caching extensions not compatible with suPHP (common on shared servers))


The standard OPcache extension is strongly recommended; since Moodle 2.6, it is the only solution officially supported by PHP developers. The benefits are increased performance and significantly lower memory usage. However, opcode caching extensions (including OPcache, eAccelerator and APC) aren't compatible with servers configured to use some common types of high-security PHP handlers such as suPHP (the default on WHM / cPanel Linux servers).

Installation

The OPcache extension is distributed as part of PHP 5.5.0 and later. It is available also for older stable PHP releases from PECL under the original name ZendOPcache.

NOTE: If you are running PHP 5.3 or 5.4 you can safely ignore the Environment Check message about OpCache. Nonetheless, it might be useful to upgrade Operating System/PHP and get to 5.5 or newer; as there have been all sorts of problems described on PHP 5.2 and 5.3, and upgrading PHP turned out to be the easier solution.

Configuration

PHP.ini settings:

[opcache] opcache.enable = 1 opcache.memory_consumption = 128 opcache.max_accelerated_files = 4000 opcache.revalidate_freq = 60

Required for Moodle

opcache.use_cwd = 1 opcache.validate_timestamps = 1 opcache.save_comments = 1 opcache.enable_file_override = 0

If something does not work in Moodle
opcache.revalidate_path = 1 ; May fix problems with include paths
opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487
Experimental for Moodle 2.6 and later
opcache.fast_shutdown = 1
opcache.enable_cli = 1 ; Speeds up CLI cron
opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps.

When using non-Windows platforms, you have to use the zend_extension configuration to load the OPcache extension into PHP by adding to php.ini. zend_extension=/full/path/to/opcache.so

When using IIS you will need PHP 5.5 and you will need to add the extension for opcache under the ExtensionList section of the php.ini file. For PHP 5.3 and 5.4 you can download the binaries separately from [1] and you will also need to enter full absolute path to the module dll in php.ini.

[ExtensionList] ... zend_extension=php_opcache.dll

max_accelerated_files

It is recommended above that opcache.max_accelerated_files should be set to 4000. From: php.net max-accelerated-files

  • The maximum number of keys (and therefore scripts) in the OPcache hash table. The actual value used will be the first number in the set of prime numbers { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } that is bigger than the configured value. Only numbers between 200 and 100000 are allowed.

Setting max_accelerated files to 4000 will allow 7963 PHP files to be cached in the hash table. While this may be suitable advice for many installations, there are approx. ~7000 PHP files in core moodle 2.7. If your version of moodle uses a bunch of non-core plugins, or if for any reasons your total number of cached PHP files in coverage is likely to exceed 7963, it would be worth increasing this number. I'd suggest the default advice to be 8000 rather than 4000. (Or to actually use one of the numbers (-1) in the prime set above.)

See also

Forum discussions: