O PHP 5.5 foi lançado e possui um novo módulo de cache de código chamado OPCache, mas não parece haver nenhuma documentação para ele.
Então, onde está a documentação e como uso o OPcache?
O PHP 5.5 foi lançado e possui um novo módulo de cache de código chamado OPCache, mas não parece haver nenhuma documentação para ele.
Então, onde está a documentação e como uso o OPcache?
Respostas:
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
:
zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)
Observe que quando o caminho contém espaços, você deve colocá-lo entre aspas:
zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"
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).
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.
var_dump(opcache_get_configuration());
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.
var_dump(opcache_get_status());
opcache_reset()
:Redefine o cache inteiro. Significando que todos os scripts em cache possíveis serão analisados novamente na próxima visita.
opcache_reset();
opcache_invalidate()
:Invalida um script em cache específico. Significando que o script será analisado novamente na próxima visita.
opcache_invalidate('/path/to/script/to/invalidate.php', true);
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:
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 .
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)
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
opcache.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 a opcache.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):
yum install php56-opcache
e depois reinicie o apache.
Eu encontrei isso ao configurar o moodle. Eu adicionei as seguintes linhas no arquivo php.ini.
zend_extension=C:\xampp\php\ext\php_opcache.dll
[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0
; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487
; Experimental for Moodle 2.6 and later
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Speeds up CLI cron
;opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps
extension=C:\xampp\php\ext\php_intl.dll
[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146