Opcache self clears and breaks code execution


I have a Magento 2 store, but this seems to be a PHP issue, with opcache enabled and sometimes the opcache seems to clear itself and I end up with a store were some actions can't be performed. Sometimes when I manually clear opcache, I also get errors and the store, while not fully offline, some actions can't be performed, depending on the error. Sometimes I can't add products to cart or place an order. The errors are similar to the ones below:

[2020-06-09 18:20:38] main.CRITICAL: Warning: preg_match(): Compilation failed: unmatched parentheses at offset 36 in /home/store/public_html/vendor/magento/zendframework1/library/Zend/Locale/Format.php on line 527 {"exception":"[object] (Exception(code: 0): Warning: preg_match(): Compilation failed: unmatched parentheses at offset 36 in /home/store/public_html/vendor/magento/zendframework1/library/Zend/Locale/Format.php on line 527 at /home/store/public_html/vendor/magento/framework/App/ErrorHandler.php:61)"} []


"Fatal Error: 'Cannot declare class Magento\\Customer\\Api\\CustomerRepositoryInterface\\Proxy, because the name is already in use' in '\/home\/store\/public_html\/generated\/code\/Magento\/Customer\/Api\/CustomerRepositoryInterface\/Proxy.php' on line 7"

Here is my opcache configuration:

; Enable Zend OPcache extension module

; Determines if Zend OPCache is enabled

; Determines if Zend OPCache is enabled for the CLI version of PHP

; The OPcache shared memory storage size.

; The amount of memory for interned strings in Mbytes.

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 100000 are allowed.

; The maximum percentage of "wasted" memory until a restart is scheduled.

; 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.

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

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

; Enables or disables file search in include_path optimization

; If disabled, all PHPDoc comments are dropped from the code to reduce the
; size of the optimized code.

; 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.

; If enabled, a fast shutdown sequence is used for the accelerated code

; Allow file existence override (file_exists, etc.) performance feature.

; A bitmask, where each bit enables or disables the appropriate OPcache
; passes


; 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).

; Allows exclusion of large files from being cached. By default all files
; are cached.

; Check the cache checksum each N requests.
; The default value of "0" means that the checks are disabled.

; How long to wait (in seconds) for a scheduled restart to begin if the cache
; is not being accessed.

; OPcache error_log file name. Empty string assumes "stderr".

; 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).

; Preferred Shared Memory back-end. Leave empty and let the system decide.

; Protect the shared memory from unexpected writing during script execution.
; Useful for internal debugging only.

; Allows calling OPcache API functions only from PHP scripts which path is
; started from specified string. The default "" means no restriction

; 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.

This is the result of my opcache_get_status(false) function:

    [opcache_enabled] => 1
    [cache_full] => 
    [restart_pending] => 
    [restart_in_progress] => 
    [memory_usage] => Array
            [used_memory] => 152442416
            [free_memory] => 1995041232
            [wasted_memory] => 0
            [current_wasted_percentage] => 0

    [interned_strings_usage] => Array
            [buffer_size] => 16777216
            [used_memory] => 12353632
            [free_memory] => 4423584
            [number_of_strings] => 176637

    [opcache_statistics] => Array
            [num_cached_scripts] => 6796
            [num_cached_keys] => 13127
            [max_cached_keys] => 130987
            [hits] => 15440094
            [start_time] => 1590744538
            [last_restart_time] => 1591785370
            [oom_restarts] => 0
            [hash_restarts] => 0
            [manual_restarts] => 14
            [misses] => 8549
            [blacklist_misses] => 15011
            [blacklist_miss_ratio] => 0.097072787583064
            [opcache_hit_rate] => 99.847642736962


in my opcache exclude list is the /home/store/public_html/pub/ dir

Automatic opcache code refresh seems to occur every other week, but not at a specific day or time of the day.

I have no logs in PHP log regarding any error with opcache

Why is opcache clearing itself while it has a lot of free space and memory and why clearing opcache might result, in what is seems to be, a broken cache code?

asked on Stack Overflow Jun 10, 2020 by Filipe Sá • edited Jun 10, 2020 by Filipe Sá

0 Answers

Nobody has answered this question yet.

User contributions licensed under CC BY-SA 3.0