首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OPcache正在自动重置缓存。

OPcache正在自动重置缓存。
EN

Server Fault用户
提问于 2015-10-22 18:31:52
回答 2查看 3.5K关注 0票数 4

我开始使用PHP5.6的内置OPcache,现在面临一个问题。我把它设置为使用1GB的RAM,这对我的网站来说已经足够高了,但它永远无法让它使用完整的1GB内存。缓存在分配这个限制之前多次被清除,就像您在这个munin图上看到的那样:

因此,每隔几天,它就会从缓存中删除所有文件,并再次开始缓存它们。

首先,我认为问题在于变量opcache.max_wasted_percentage,但它不关心我将其设置到哪个值。我的配置如下:

代码语言:javascript
复制
; configuration for php ZendOpcache module
; priority=05
zend_extension=opcache.so
opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 1024
opcache.interned_strings_buffer = 128
opcache.blacklist_filename = /etc/php5/opcache_blacklist.txt
opcache.max_accelerated_files = 65407
opcache.revalidate_freq = 5
opcache.fast_shutdown = 1
opcache.max_wasted_percentage = 50
opcache.enable_file_override = 1

我正在一个最新的Debian与nginx和FastCGI的环境中使用它。

我想要实现的是,只有当内存消耗达到1GB时,缓存才会被清除。我已经尝试过一种非常小的配置,如下所示:

代码语言:javascript
复制
; configuration for php ZendOpcache module
; priority=05
zend_extension=opcache.so
opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 1024

即使这样,问题仍然存在。

如果需要FPM配置:

代码语言:javascript
复制
user = www
group = www
listen = 127.0.0.1:9002
listen.owner = www
listen.group = www

listen.allowed_clients = 127.0.0.1
pm = ondemand
pm.max_children = 100
pm.process_idle_timeout = 5s;

php.ini:

代码语言:javascript
复制
[PHP]
engine = On
short_open_tag = Off
asp_tags = Off
precision = 14
y2k_compliance = On
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
allow_call_time_pass_reference = Off
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
disable_functions = escapeshellcmd, exec, ini_restore, passthru, popen, proc_nice, proc_open, shell_exec, show_source, system
disable_classes =
zend.enable_gc = On
expose_php = Off
max_execution_time = 120
max_input_time = 300
memory_limit = 512M
error_reporting = E_ALL & ~E_DEPRECATED
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = Off
error_log = /var/log/nginx/php_error.log
variables_order = "GPCS"
request_order = "GP"
register_globals = Off
register_long_arrays = Off
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 2000M
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
doc_root =
user_dir =
enable_dl = Off
cgi.fix_pathinfo = 0
file_uploads = On
upload_max_filesize = 200M
max_file_uploads = 200
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60

希望我能在这里找到任何人谁已经面临这个问题,并能够解决它。因此,我的最后一个问题是:如何配置OpCache,以便在可用内存已满时才能清除它?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2016-06-07 16:28:46

我现在可以核实我的情况是什么问题了:

我使用一个软件,它能够删除自己的缓存,并使用包系统,您可以在其中安装新的软件包。

每当我安装一个新包或清除缓存时,软件就运行一个opcache_reset(),而不是仅仅使用opcache_invalidate(),因为它知道哪些文件将被…更改。

票数 0
EN

Server Fault用户

发布于 2015-11-24 23:17:12

OPcache转储整个缓存并在达到其配置的任何限制时重新启动。这种行为有点烦人,但这正是我们目前所坚持的。

由于您没有达到内存限制,我猜您正在达到一个没有收集度量标准的极限。

特别是,您没有收集使用中的缓存键(文件)数量的指标。我怀疑你已经达到了你设定的65407的极限,应该提高它。

无论您是否达到了这个极限,您都应该开始收集这些数据。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/730953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档