PHP 5.5 è stato rilasciato e presenta un nuovo modulo di memorizzazione nella cache del codice chiamato OPCache, ma non sembra esserci alcuna documentazione per esso.
Allora, dove è la documentazione per esso e come posso usare OPcache?
PHP 5.5 è stato rilasciato e presenta un nuovo modulo di memorizzazione nella cache del codice chiamato OPCache, ma non sembra esserci alcuna documentazione per esso.
Allora, dove è la documentazione per esso e come posso usare OPcache?
Risposte:
OpCache è compilato per impostazione predefinita su PHP5.5 +. Tuttavia è disabilitato per impostazione predefinita. Per iniziare a usare OpCache in PHP5.5 + dovrai prima abilitarlo. Per fare questo dovresti fare quanto segue.
Aggiungi la seguente riga al tuo php.ini
:
zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)
Si noti che quando il percorso contiene spazi, è necessario racchiuderlo tra virgolette:
zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"
Nota anche che dovrai usare la zend_extension
direttiva invece della direttiva "normale" extension
perché influenza l'attuale motore Zend (cioè la cosa che esegue PHP).
Attualmente ci sono quattro funzioni che puoi usare:
opcache_get_configuration()
:Restituisce un array contenente la configurazione attualmente utilizzata da OpCache. Ciò include tutte le impostazioni ini nonché le informazioni sulla versione e i file nella lista nera.
var_dump(opcache_get_configuration());
opcache_get_status()
:Ciò restituirà un array con informazioni sullo stato corrente della cache. Queste informazioni includeranno cose come: lo stato in cui si trova la cache (abilitato, riavvio, completo ecc.), L'utilizzo della memoria, hit, mancate e alcune informazioni più utili. Conterrà anche gli script memorizzati nella cache.
var_dump(opcache_get_status());
opcache_reset()
:Reimposta l'intera cache. Ciò significa che tutti i possibili script memorizzati nella cache verranno analizzati nuovamente alla visita successiva.
opcache_reset();
opcache_invalidate()
:Invalida uno specifico script memorizzato nella cache. Ciò significa che la sceneggiatura verrà analizzata di nuovo alla visita successiva.
opcache_invalidate('/path/to/script/to/invalidate.php', true);
Esistono alcune GUI create per aiutare a mantenere OpCache e generare utili report. Questi strumenti sfruttano le funzioni di cui sopra.
OpCacheGUI
Disclaimer Sono l'autore di questo progetto
Caratteristiche:
Screenshots:
URL: https://github.com/PeeHaa/OpCacheGUI
opcache-status
Caratteristiche:
Immagine dello schermo:
URL: https://github.com/rlerdorf/opcache-status
opcache-gui
Caratteristiche:
Immagine dello schermo:
Poiché OPcache è progettato per sostituire il modulo APC, non è possibile eseguirli in parallelo in PHP. Questo va bene per la memorizzazione nella cache del codice operativo PHP in quanto nessuno dei due influenza il modo in cui si scrive il codice.
Tuttavia, significa che se si sta utilizzando APC per archiviare altri dati (tramite la apc_store()
funzione) non sarà possibile farlo se si decide di utilizzare OPCache.
Dovrai utilizzare un'altra libreria come APCu o Yac che entrambi memorizzano i dati nella memoria PHP condivisa o passare a utilizzare qualcosa come memcached, che memorizza i dati in memoria in un processo separato in PHP.
Inoltre, OPcache non ha un equivalente dell'indicatore di avanzamento del caricamento presente in APC. Dovresti invece utilizzare l' avanzamento del caricamento della sessione .
La documentazione per OPcache è disponibile qui con tutte le opzioni di configurazione elencate qui . Le impostazioni consigliate sono:
; 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 si utilizza una libreria o un codice che utilizza annotazioni di codice, è necessario abilitare i commenti di salvataggio:
opcache.save_comments=1
Se disabilitato, tutti i commenti PHPDoc vengono eliminati dal codice per ridurre le dimensioni del codice ottimizzato. La disabilitazione di "Commenti doc" potrebbe interrompere alcune applicazioni e framework esistenti (ad es. Doctrine, ZF2, PHPUnit)
Ho intenzione di buttare i miei due centesimi per quello che uso opcache.
Ho creato un ampio framework con molti campi, metodi di convalida ed enumerazioni per poter parlare con il mio database.
Senza opcache
Quando utilizzo questo script senza opcache e invio 9000 richieste in 2,8 secondi al server apache, esso raggiunge il 90-100% cpu per 70-80 secondi fino a quando non raggiunge tutte le richieste.
Total time taken: 76085 milliseconds(76 seconds)
Con opcache abilitato
Con opcache abilitato gira al 25-30% di cpu per circa 25 secondi e non supera mai il 25% di cpu.
Total time taken: 26490 milliseconds(26 seconds)
Ho creato un file blacklist opcache per disabilitare la memorizzazione nella cache di tutto tranne il framework, che è tutto statico e non necessita di modifiche di funzionalità. Ho scelto esplicitamente solo i file del framework in modo da poterlo sviluppare senza preoccuparmi di ricaricare / convalidare i file della cache. Avere tutto nella cache consente di risparmiare un secondo sul totale delle richieste25546 milliseconds
Ciò espande in modo significativo la quantità di dati / richieste che posso gestire al secondo senza che il server si rompa il sudore.
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;
Sostituisci semplicemente il; con un invio nel file ini. Ma questo è quello che ho usato. principalmente roba di default
opcache.revalidate_freq=60;
determina la durata della memoria di un file in secondi. allo scadere del tempo ricompila il file.
opcache.revalidate_freq
controlla la frequenza con cui uno script viene verificato per le modifiche (in base alla modifica del timestamp). Quindi, se il timestamp di uno script rimane lo stesso dell'ultima volta che è stato compilato, non verrà ricompilato. Tutto questo presuppone che non sia stata modificata l' opcache.validate_timestamps
impostazione, abilitata per impostazione predefinita.
Con PHP 5.6 su Amazon Linux (dovrebbe essere lo stesso su RedHat o CentOS):
yum install php56-opcache
e quindi riavviare apache.
L'ho riscontrato durante l'impostazione di Moodle. Ho aggiunto le seguenti righe nel file 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