Eu comecei a usar o PHP built-in OPcache do PHP 5.6 e estou enfrentando um problema agora. Eu configurá-lo para usar até 1 GB de RAM, o que é altamente suficiente para meus sites, mas nunca conseguir usá-lo para o total de 1 GB de RAM. O cache é limpo muitas vezes antes de alocar este limite, como você pode ver neste gráfico munin:
Assim,acadapoucosdias,todososarquivossãoexcluídosdocacheereiniciadosparaseremarmazenadosemcache.
Primeiro,acheiqueoproblemaéavariávelopcache.max_wasted_percentage
,masnãoimportaqualvaloreudefini.Minhaconfiguraçãoéaseguinte:
;configurationforphpZendOpcachemodule;priority=05zend_extension=opcache.soopcache.enable=1opcache.enable_cli=1opcache.memory_consumption=1024opcache.interned_strings_buffer=128opcache.blacklist_filename=/etc/php5/opcache_blacklist.txtopcache.max_accelerated_files=65407opcache.revalidate_freq=5opcache.fast_shutdown=1opcache.max_wasted_percentage=50opcache.enable_file_override=1
EstouusandoemumambientedomaisrecenteDebianJessiecomnginxeFastCGI.
Euqueroqueocachesósejalimpoquandooconsumodememóriaatingiro1GB.Eujátenteiumaconfiguraçãomínima,assim:
;configurationforphpZendOpcachemodule;priority=05zend_extension=opcache.soopcache.enable=1opcache.enable_cli=1opcache.memory_consumption=1024
Mesmoassim,oproblemaaindapersiste.
SeaconfiguraçãodoFPMfornecessária:
user=wwwgroup=wwwlisten=127.0.0.1:9002listen.owner=wwwlisten.group=wwwlisten.allowed_clients=127.0.0.1pm=ondemandpm.max_children=100pm.process_idle_timeout=5s;
php.ini:
[PHP]engine=Onshort_open_tag=Offasp_tags=Offprecision=14y2k_compliance=Onoutput_buffering=4096zlib.output_compression=Offimplicit_flush=Offunserialize_callback_func=serialize_precision=17allow_call_time_pass_reference=Offsafe_mode=Offsafe_mode_gid=Offsafe_mode_include_dir=safe_mode_exec_dir=safe_mode_allowed_env_vars=PHP_safe_mode_protected_env_vars=LD_LIBRARY_PATHdisable_functions=escapeshellcmd,exec,ini_restore,passthru,popen,proc_nice,proc_open,shell_exec,show_source,systemdisable_classes=zend.enable_gc=Onexpose_php=Offmax_execution_time=120max_input_time=300memory_limit=512Merror_reporting=E_ALL&~E_DEPRECATEDdisplay_errors=Offdisplay_startup_errors=Offlog_errors=Onlog_errors_max_len=1024ignore_repeated_errors=Offignore_repeated_source=Offreport_memleaks=Ontrack_errors=Offhtml_errors=Offerror_log=/var/log/nginx/php_error.logvariables_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
Espero poder encontrar aqui alguém que já tenha enfrentado esse problema e possa resolvê-lo. Então, minha pergunta final é: Como posso configurar o OpCache para que ele seja limpo quando a memória utilizável estiver cheia?