Pena que a documentação NÃO nos diz como compilar o opcache corretamente / desabilitá-lo nem solucionar o autoconf da fonte PHP 5.6.24+, para que o PHP compile! :-(
Filip OvertoneSinger Rydlo
@ Fred-ii- "Existem muitas configurações que podem precisar de ajustes. Compreender como funciona e identificar problemas durante a fase de estabilização do processo de lançamento do PHP 5.5 ajudará bastante." ... Essa postagem no blog não é muito útil. Ele não explica como entender como funciona ou qual a melhor forma de ajustar as configurações :(
icc97 16/17
Respostas:
371
Instalação
O OpCache é compilado por padrão no PHP5.5 +. No entanto, está desativado por padrão. Para começar a usar o OpCache no PHP5.5 +, primeiro você deverá habilitá-lo. Para fazer isso, você teria que fazer o seguinte.
Observe também que você terá que usar a zend_extensiondiretiva em vez da diretiva "normal" extensionporque isso afeta o mecanismo Zend real (isto é, o que executa o PHP).
Uso
Atualmente, existem quatro funções que você pode usar:
Retorna uma matriz que contém a configuração usada atualmente pelo OpCache. Isso inclui todas as configurações ini, além de informações sobre versão e arquivos na lista negra.
Isso retornará uma matriz com informações sobre o status atual do cache. Esta informação incluirá coisas como: o estado em que o cache está (ativado, reiniciado, cheio etc), o uso de memória, ocorrências, erros e algumas informações mais úteis. Ele também conterá os scripts em cache.
Alguma coisa em relação ao PHP-CLI? Como a CLI utiliza? Quando o FPM é reiniciado, o OPCache é redefinido - isso também afeta o OPCache da CLI? O OPCache da CLI é separado ou compartilha o mesmo pool de cache com o FPM? Obrigado!
Shahriyar Imanov 25/02
3
O OpCache foi ativado por padrão para mim na minha instalação mais recente no ubuntu 14.04, apache 2.4.7, php 5.5.9.
Jstats 20/05
oi, na sua terceira captura de tela, cache_full é falso, estou assumindo que está relacionado ao cache de página inteira, você poderia me dizer como ativá-lo? (torná-la verdadeira)
brucekaushik
Estou errado, isso não é para armazenar em cache a página inteira, mas será exibido se a memória usada pelo cache estiver cheia. Obrigado de qualquer forma!
brucekaushik
zend_extension = C: \ caminho \ para \ php_opcache.dll (win) - A adição desta linha no php.ini funciona bem.
Kalidasan
152
OPcache substitui APC
Como o OPcache foi projetado para substituir o módulo APC, não é possível executá-los em paralelo no PHP. Isso é bom para armazenar em cache o código de operação do PHP, pois não afeta a maneira como você escreve o código.
No entanto, isso significa que se você estiver usando o APC no momento para armazenar outros dados (por meio da apc_store()função), não poderá fazer isso se decidir usar o OPCache.
Você precisará usar outra biblioteca, como APCu ou Yac, que armazena dados na memória PHP compartilhada ou alterna para usar algo como memcached, que armazena dados na memória em um processo separado para PHP.
Além disso, o OPcache não tem equivalente ao medidor de progresso do upload presente na APC. Em vez disso, você deve usar o andamento do upload da sessão .
Configurações para OPcache
A documentação do OPcache pode ser encontrada aqui com todas as opções de configuração listadas aqui . As configurações recomendadas são:
; Sets how much memory to use
opcache.memory_consumption=128;Sets how much memory should be used by OPcache for storing internal strings ;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000;How often (in seconds) to check file timestamps for changes to the shared;memory storage allocation.
opcache.revalidate_freq=60;If enabled, a fast shutdown sequence is used for the accelerated code;The fast shutdown sequence doesn't free each allocated block, but lets;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1
Se você usar qualquer biblioteca ou código que use anotações de código, deverá ativar os comentários salvos:
opcache.save_comments=1
Se desativado, todos os comentários do PHPDoc são eliminados do código para reduzir o tamanho do código otimizado. Desativar "Comentários do Doc" pode quebrar alguns aplicativos e estruturas existentes (por exemplo, Doctrine, ZF2, PHPUnit)
Essas configurações são recomendadas para ambientes de produção, desenvolvimento ou ambos?
Marcvangend
1
Talvez um mal-entendido da minha parte sobre o que exatamente é o opcache e para que é usado, mas eu o configurei e testei com o script de status do PeeHaa abaixo. Tudo está funcionando. Mas ainda estou fazendo a pergunta do OP. "Como usá-lo?" Não é para cache de visualizações e o que é?
isimmons
3
@isimmons "O OPcache melhora o desempenho do PHP armazenando o bytecode de script pré-compilado na memória compartilhada, eliminando assim a necessidade do PHP carregar e analisar scripts em cada solicitação."
Danack 10/10
1
@marcvangend Good point! Eu acho que o cache faz sentido na produção, portanto essas configurações provavelmente são configurações de produção.
Sliq 11/11
3
Alguém pode explicar por que o desempenho recomendado das configurações é pior que o padrão ou quando deve começar a dar efeito?
RP
19
Vou cair em meus dois centavos pelo que uso opcache.
Eu criei uma estrutura extensa com muitos campos e métodos de validação e enumerações para poder conversar com meu banco de dados.
Sem opcache
Ao usar esse script sem o opcache e eu envio 9000 solicitações em 2,8 segundos para o servidor apache, ele atinge o limite de 90 a 100% da CPU por 70 a 80 segundos até alcançar todas as solicitações.
Total time taken: 76085 milliseconds(76 seconds)
Com o opcache ativado
Com o opcache ativado, ele roda em 25-30% do tempo da CPU por cerca de 25 segundos e nunca passa em 25% do uso da CPU.
Total time taken: 26490 milliseconds(26 seconds)
Eu criei um arquivo de lista negra do opcache para desativar o cache de tudo, exceto a estrutura, que é toda estática e não precisa ser alterada de funcionalidade. Escolho explicitamente apenas os arquivos da estrutura para que eu possa desenvolver sem me preocupar em recarregar / validar os arquivos de cache. Manter tudo em cache economiza um segundo no total de solicitações25546 milliseconds
Isso expande significativamente a quantidade de dados / solicitações que eu posso lidar por segundo sem que o servidor sequer se preocupe.
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;Apenas substitua o; com uma entrada no arquivo ini. Mas é isso que eu usei. principalmente coisas padrão
Tschallacka
1
btw, me executar este com memcache fazendo 2100 banco de dados solicita uma segunda executa o script eu uso dentro de 150 microssegundos (cerca de 1 / 6th de um milissegundo)
Tschallacka
1
O Opcache armazena em cache os arquivos php na forma compilada na memória. Portanto, você não terá mais sobrecarga de leitura do disco e compilação e otimização de arquivos pelo analisador php. Memcache é algo que você pode usar para armazenar variáveis entre as sessões. Sayt, por exemplo, um usuário possui um script de atualização que solicita os mesmos parâmetros por 10 segundos enquanto o usuário olha para ascreen. Você pode usar o cache de mem para compilar a consulta uma vez e, em seguida, continuar solicitando a consulta compilada a partir da memória, e não a regenerar.
Tschallacka 23/02
2
isso não acontece. opcache.revalidate_freq=60;determina quanto tempo um arquivo pode ficar na memória em segundos. quando o tempo acaba, recompila o arquivo.
Tschallacka 23/02
3
Na verdade, opcache.revalidate_freqcontrola a frequência com que um script é verificado quanto a alterações (com base na alteração do carimbo de data e hora). Portanto, se o carimbo de data e hora de um script permanecer o mesmo da última vez que foi compilado, ele não será recompilado. Tudo isso pressupõe que você não alterou a opcache.validate_timestampsconfiguração, que é ativada por padrão.
jjlin
4
Com o PHP 5.6 no Amazon Linux (deve ser o mesmo no RedHat ou CentOS):
Respostas:
Instalação
O OpCache é compilado por padrão no PHP5.5 +. No entanto, está desativado por padrão. Para começar a usar o OpCache no PHP5.5 +, primeiro você deverá habilitá-lo. Para fazer isso, você teria que fazer o seguinte.
Adicione a seguinte linha ao seu
php.ini
:Observe que quando o caminho contém espaços, você deve colocá-lo entre aspas:
Observe também que você terá que usar a
zend_extension
diretiva em vez da diretiva "normal"extension
porque isso afeta o mecanismo Zend real (isto é, o que executa o PHP).Uso
Atualmente, existem quatro funções que você pode usar:
opcache_get_configuration()
:Retorna uma matriz que contém a configuração usada atualmente pelo OpCache. Isso inclui todas as configurações ini, além de informações sobre versão e arquivos na lista negra.
opcache_get_status()
:Isso retornará uma matriz com informações sobre o status atual do cache. Esta informação incluirá coisas como: o estado em que o cache está (ativado, reiniciado, cheio etc), o uso de memória, ocorrências, erros e algumas informações mais úteis. Ele também conterá os scripts em cache.
opcache_reset()
:Redefine o cache inteiro. Significando que todos os scripts em cache possíveis serão analisados novamente na próxima visita.
opcache_invalidate()
:Invalida um script em cache específico. Significando que o script será analisado novamente na próxima visita.
Manutenção e relatórios
Existem algumas GUIs criadas para ajudar a manter o OpCache e gerar relatórios úteis. Essas ferramentas aproveitam as funções acima.
OpCacheGUI
Isenção de responsabilidade Eu sou o autor deste projeto
Recursos:
Imagens:
URL: https://github.com/PeeHaa/OpCacheGUI
opcache-status
Recursos:
Captura de tela:
URL: https://github.com/rlerdorf/opcache-status
opcache-gui
Recursos:
Captura de tela:
URL: https://github.com/amnuts/opcache-gui
fonte
OPcache substitui APC
Como o OPcache foi projetado para substituir o módulo APC, não é possível executá-los em paralelo no PHP. Isso é bom para armazenar em cache o código de operação do PHP, pois não afeta a maneira como você escreve o código.
No entanto, isso significa que se você estiver usando o APC no momento para armazenar outros dados (por meio da
apc_store()
função), não poderá fazer isso se decidir usar o OPCache.Você precisará usar outra biblioteca, como APCu ou Yac, que armazena dados na memória PHP compartilhada ou alterna para usar algo como memcached, que armazena dados na memória em um processo separado para PHP.
Além disso, o OPcache não tem equivalente ao medidor de progresso do upload presente na APC. Em vez disso, você deve usar o andamento do upload da sessão .
Configurações para OPcache
A documentação do OPcache pode ser encontrada aqui com todas as opções de configuração listadas aqui . As configurações recomendadas são:
Se você usar qualquer biblioteca ou código que use anotações de código, deverá ativar os comentários salvos:
fonte
Vou cair em meus dois centavos pelo que uso opcache.
Eu criei uma estrutura extensa com muitos campos e métodos de validação e enumerações para poder conversar com meu banco de dados.
Sem opcache
Ao usar esse script sem o opcache e eu envio 9000 solicitações em 2,8 segundos para o servidor apache, ele atinge o limite de 90 a 100% da CPU por 70 a 80 segundos até alcançar todas as solicitações.
Total time taken: 76085 milliseconds(76 seconds)
Com o opcache ativado
Com o opcache ativado, ele roda em 25-30% do tempo da CPU por cerca de 25 segundos e nunca passa em 25% do uso da CPU.
Total time taken: 26490 milliseconds(26 seconds)
Eu criei um arquivo de lista negra do opcache para desativar o cache de tudo, exceto a estrutura, que é toda estática e não precisa ser alterada de funcionalidade. Escolho explicitamente apenas os arquivos da estrutura para que eu possa desenvolver sem me preocupar em recarregar / validar os arquivos de cache. Manter tudo em cache economiza um segundo no total de solicitações
25546 milliseconds
Isso expande significativamente a quantidade de dados / solicitações que eu posso lidar por segundo sem que o servidor sequer se preocupe.
fonte
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;
Apenas substitua o; com uma entrada no arquivo ini. Mas é isso que eu usei. principalmente coisas padrãoopcache.revalidate_freq=60;
determina quanto tempo um arquivo pode ficar na memória em segundos. quando o tempo acaba, recompila o arquivo.opcache.revalidate_freq
controla a frequência com que um script é verificado quanto a alterações (com base na alteração do carimbo de data e hora). Portanto, se o carimbo de data e hora de um script permanecer o mesmo da última vez que foi compilado, ele não será recompilado. Tudo isso pressupõe que você não alterou aopcache.validate_timestamps
configuração, que é ativada por padrão.Com o PHP 5.6 no Amazon Linux (deve ser o mesmo no RedHat ou CentOS):
e depois reinicie o apache.
fonte
Eu encontrei isso ao configurar o moodle. Eu adicionei as seguintes linhas no arquivo php.ini.
intl -> http://php.net/manual/en/book.intl.php
fonte
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146