Skip to content

Instantly share code, notes, and snippets.

@tegansnyder
Last active September 2, 2022 16:24
Show Gist options
  • Save tegansnyder/608185c9aeb11c10d8ae to your computer and use it in GitHub Desktop.
Save tegansnyder/608185c9aeb11c10d8ae to your computer and use it in GitHub Desktop.
OpCache settings for Magento on PHP 5.5.14. Store this file as /etc/php.d/opcache.ini
; Enable Zend OPcache extension module
zend_extension=opcache.so
; Determines if Zend OPCache is enabled
opcache.enable=1
; Determines if Zend OPCache is enabled for the CLI version of PHP
;opcache.enable_cli=0
; The OPcache shared memory storage size.
opcache.memory_consumption=256
; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=12
; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 100000 are allowed.
opcache.max_accelerated_files=16000
; The maximum percentage of "wasted" memory until a restart is scheduled.
;opcache.max_wasted_percentage=5
; 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.use_cwd=1
; When disabled, you must reset the OPcache manually or restart the
; webserver for changes to the filesystem to take effect.
opcache.validate_timestamps=0
; 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.revalidate_freq=2
; Enables or disables file search in include_path optimization
;opcache.revalidate_path=0
; If disabled, all PHPDoc comments are dropped from the code to reduce the
;size of the optimized code.
opcache.save_comments=0
; If disabled, PHPDoc comments are not loaded from SHM, so "Doc Comments"
; may be always stored (save_comments=1), but not loaded by applications
; that don't need them anyway.
opcache.load_comments=0
; If enabled, a fast shutdown sequence is used for the accelerated code
opcache.fast_shutdown=1
; Allow file existence override (file_exists, etc.) performance feature.
opcache.enable_file_override=1
; A bitmask, where each bit enables or disables the appropriate OPcache
; passes
;opcache.optimization_level=0xffffffff
;opcache.inherited_hack=1
;opcache.dups_fix=0
; 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.
opcache.blacklist_filename=/etc/php.d/opcache*.blacklist
; Allows exclusion of large files from being cached. By default all files
; are cached.
;opcache.max_file_size=0
; Check the cache checksum each N requests.
; The default value of "0" means that the checks are disabled.
;opcache.consistency_checks=0
; How long to wait (in seconds) for a scheduled restart to begin if the cache
; is not being accessed.
;opcache.force_restart_timeout=180
; OPcache error_log file name. Empty string assumes "stderr".
opcache.error_log=/var/log/php5/php5-opcache.error.log
; 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.log_verbosity_level=1
; Preferred Shared Memory back-end. Leave empty and let the system decide.
;opcache.preferred_memory_model=
; Protect the shared memory from unexpected writing during script execution.
; Useful for internal debugging only.
;opcache.protect_memory=0
@tegansnyder
Copy link
Author

Use for production environments.

Width validate_timestamps disabled you must reset the OpCache manually or restart Apache for changes to the filesystem to take effect. After each code deployment you can login to the Magento admin and goto the OpCache control panel and hit reset cache. Or issue the command line reset by curling a page with something like this:

<?php
require_once('app/Mage.php');
umask(0);
Mage::app();

$result = Mage::getSingleton('opcache/cache')->reset();
if ($result === TRUE) {
    echo 'Reset cache successful!';
} else {
    echo 'Reset cache failed!';
}

Note for above to work you need this extension:
https://github.com/SchumacherFM/Magento-OpCache

Also for those of you using Capistrano or another Symlink based deployment please read this about OpCache:
Please note this about symlink based deployments: http://codinghobo.com/opcache-and-symlink-based-deployments/

@chbibo
Copy link

chbibo commented Jan 8, 2015

Thanks Tegan.
Is it applied to all production env?

@tegansnyder
Copy link
Author

@chbibo yes production

@studio2f
Copy link

First off-- thank you for this! Second, OpCache seems to be caching Magento API calls. Any idea how to blacklist or exclude any calls to the API?

@studio2f
Copy link

If it helps anyone else-- I blacklisted /app/code/core/Mage/Api/* and the API works.Thanks again.

@tegansnyder
Copy link
Author

Some more good knowledge being dropped here:
http://jpauli.github.io/2015/03/05/opcache.html

@PieterCappelle
Copy link

Hi @tegansnyder. This slide was yesterday on a Magento Imagine session given by an Magento employee. You should make some improvements I think.

opcache.memory_consumption=768
opcache.max_accelerated_files=60000

https://img42.com/xo0Ja

What do you think about it?

@philicious
Copy link

@studio2f the correct blacklist path for the API is DOCUMENT_ROOT/app/code/core/Mage/Api/* or it wont work. e.g. /var/www/htdocs/app/code/core/Mage/Api/*

@brandontamm
Copy link

I noticed you guys are recommending not to cache Magento API calls - can someone help me out with understanding why we make this recommendation? I have a Magento installation and I just setup OpCache. My Magento app connects via API with Salesforce and I am looking to cache anything I can, but I didn't understand why we wouldn't want to cache API? Easy now - I'm a n00b ;)

@Winfle
Copy link

Winfle commented Oct 20, 2016

@brandontamm maybe they mean caching of Api-call "response". Its possible during the Soap-calls, when it gets the same response with the same input-parameters. You can check WSDL-cache and disable, but I think that its not "OPcache" cache. (I could be wrong)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment