Skip to content

Instantly share code, notes, and snippets.

@rohankhudedev
Last active October 13, 2024 22:20
Show Gist options
  • Save rohankhudedev/1a9c0a3c7fb375f295f9fc11aeb116fe to your computer and use it in GitHub Desktop.
Save rohankhudedev/1a9c0a3c7fb375f295f9fc11aeb116fe to your computer and use it in GitHub Desktop.
Best Zend OpCache Settings / Tuning / Configurations
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1
; Determines if Zend OPCache is enabled for the CLI version of PHP
;opcache.enable_cli=1
; The OPcache shared memory storage size.
opcache.memory_consumption=512
; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=64
; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
;If you have multiple PHP sites on the server then consider the value 130986
; for magento 2, keep 65406
opcache.max_accelerated_files=50000
; The maximum percentage of "wasted" memory until a restart is scheduled.
opcache.max_wasted_percentage=15
; 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.
; For Development / testing, keep 1
; For performance / production, keep 0
opcache.validate_timestamps=0
;opcache.revalidate_freq How often in seconds should the code
;cache expire and check if your code has changed. 0 means it
;checks your PHP code every single request IF YOU HAVE
;opcache.validate_timestamps ENABLED. opcache.validate_timestamps
;should not be enabled by default, as long as it's disabled then any value for opcache.
;revalidate_freq will basically be ignored. You should really only ever enable
;this during development, you don't really want to enable this setting for a production application.
opcache.revalidate_freq=0
; 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=1
; If enabled, a fast shutdown sequence is used for the accelerated code
; Depending on the used Memory Manager this may cause some incompatibilities.
opcache.fast_shutdown=1
; Allow file existence override (file_exists, etc.) performance feature.
;opcache.enable_file_override=0
; 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. 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).
;opcache.blacklist_filename=
; 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=
; 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
; Allows calling OPcache API functions only from PHP scripts which path is
; started from specified string. The default "" means no restriction
;opcache.restrict_api=
; 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.mmap_base=0x20000000
; Enables and sets the second level cache directory.
; It should improve performance when SHM memory is full, at server restart or
; SHM reset. The default "" disables file based caching.
;opcache.file_cache=
; Enables or disables opcode caching in shared memory.
;opcache.file_cache_only=0
; Enables or disables checksum validation when script loaded from file cache.
;opcache.file_cache_consistency_checks=1
; Implies opcache.file_cache_only=1 for a certain process that failed to
; reattach to the shared memory (for Windows only). Explicitly enabled file
; cache is required.
opcache.file_cache_fallback=1
; Enables or disables copying of PHP code (text segment) into HUGE PAGES.
; This should improve performance, but requires appropriate OS configuration.
;opcache.huge_code_pages=1
; Validate cached file permissions.
; opcache.validate_permission=0
; Prevent name collisions in chroot'ed environment.
; opcache.validate_root=0
@rohankhudedev
Copy link
Author

rohankhudedev commented Feb 19, 2018

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)
reference

@victorpdiez
Copy link

opcache.validate_timestamps=0 on IIS and php 7.4 gives me problems since it will not update the php content

@nko-sh
Copy link

nko-sh commented Oct 11, 2021

opcache.validate_timestamps=0 on IIS and php 7.4 gives me problems since it will not update the php content

Its already stated in the config file:

; When disabled, you must reset the OPcache manually or restart the
; webserver for changes to the filesystem to take effect.

@edwin-coder-arquitech
Copy link

excellent config, thanks you

@d3signa
Copy link

d3signa commented May 10, 2022

Thx, its noticible the performance boost

@artmcel
Copy link

artmcel commented Aug 4, 2022

Check it out to opcache.fast_shutdown config. This directive has been removed in PHP 7.2.0. A variant of the fast shutdown sequence has been integrated into PHP and will be automatically used if possible. Best regards. https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.fast-shutdown

@kilitary
Copy link

kilitary commented Nov 4, 2022

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) reference

just to tune ret's

@DBS-DANGER-BOYS
Copy link

Hi

@MHitMaN
Copy link

MHitMaN commented Jan 10, 2023

Hey @rohankhudedev

Thanks for sharing this, I'm using this config without any problems like months.
Another new thing after PHP v8 upper is the OPCache Jit, Can you please add the best values for this one too on the config file?

Regards.

@phoebusgbw
Copy link

Thanks for sharing!

@LionelHoudelier
Copy link

LionelHoudelier commented Jul 19, 2023

Thanks guys!
Here in a script:

#!/bin/sh
#source: https://gist.github.com/rohankhudedev/1a9c0a3c7fb375f295f9fc11aeb116f
#TODO: change the php_file_path and run
php_file_path=/etc/php/8.2/cli/php.ini
n2 sed -i '/opcache.enable/c opcache.enable=1' $php_file_path
n2 sed -i '/opcache.memory_consumption/c opcache.memory_consumption=512' $php_file_path
n2 sed -i '/opcache.interned_strings_buffer/c opcache.interned_strings_buffer=64' $php_file_path
n2 sed -i '/opcache.max_accelerated_files/c opcache.max_accelerated_files=5000' $php_file_path
n2 sed -i '/opcache.max_wasted_percentage/c opcache.max_wasted_percentage=15' $php_file_path
n2 sed -i '/opcache.validate_timestamps/c opcache.validate_timestamps=0' $php_file_path
n2 sed -i '/opcache.revalidate_freq/c opcache.revalidate_freq=0' $php_file_path
n2 sed -i '/opcache.save_comments/c opcache.save_comments=1' $php_file_path
n2 sed -i '/opcache.fast_shutdown/c opcache.fast_shutdown=1' $php_file_path
n2 sed -i '/opcache.mmap_base/c opcache.mmap_base=0x20000000' $php_file_path
n2 sed -i '/opcache.file_cache_fallback/c opcache.file_cache_fallback=1' $php_file_path
systemctl restart apache2

@elverado
Copy link

Great config, thanks. One warning is that on a Wordpresss site or other systems with auto-updates, the opcache.validate_timestamps needs to be 1 (default) or else a third party plugin update with significant code edits will need a manual PHP service restart, showing 500 error until restarted. Set opcache.validate_timestamps=1 and a opcache.revalidate_freq=60 for a max of one minute downtime but picking up some opcache gains

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