PHP OPcache está redefinindo o cache automaticamente

3

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?

    
por KittMedia 22.10.2015 / 20:31

2 respostas

0

Agora, posso verificar qual foi o problema no meu caso:

Eu uso um software, que é capaz de excluir seus próprios caches e que usa um sistema de pacotes, onde você pode instalar novos pacotes.

Sempre que eu instalar um novo pacote ou limpar o cache, o software executará um opcache_reset() em vez de usar apenas opcache_invalidate() porque sabe quais arquivos estão prestes a ser alterados…

    
por 07.06.2016 / 18:28
0

O OPcache despeja todo o cache e recomeça sempre que atinge algum dos seus limites configurados. Esse comportamento é um pouco chato, mas é com o que estamos presos por enquanto.

Como você não está atingindo o limite de memória, meu palpite é que você está atingindo um limite no qual não está coletando métricas.

Em particular, você não está coletando métricas sobre o número de chaves de cache (arquivos) em uso. Eu suspeito que você está atingindo o limite de 65407 que você configurou e deve aumentá-lo.

Se você está atingindo esse limite ou não, comece a coletar esses dados.

    
por 25.11.2015 / 00:17