Se ha lanzado PHP 5.5 y presenta un nuevo módulo de almacenamiento en caché de código llamado OPCache, pero no parece haber ninguna documentación para ello.
Entonces, ¿dónde está la documentación y cómo uso OPcache?
Se ha lanzado PHP 5.5 y presenta un nuevo módulo de almacenamiento en caché de código llamado OPCache, pero no parece haber ninguna documentación para ello.
Entonces, ¿dónde está la documentación y cómo uso OPcache?
Respuestas:
OpCache se compila por defecto en PHP5.5 +. Sin embargo, está deshabilitado de forma predeterminada. Para comenzar a usar OpCache en PHP5.5 + primero deberá habilitarlo. Para hacer esto, tendría que hacer lo siguiente.
Agregue la siguiente línea a su php.ini
:
zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)
Tenga en cuenta que cuando la ruta contiene espacios, debe envolverla entre comillas:
zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"
También tenga en cuenta que tendrá que usar la zend_extension
directiva en lugar de la directiva "normal" extension
porque afecta el motor Zend real (es decir, lo que ejecuta PHP).
Actualmente hay cuatro funciones que puede usar:
opcache_get_configuration()
:Devuelve una matriz que contiene la configuración utilizada actualmente por OpCache. Esto incluye todas las configuraciones ini, así como información de versión y archivos en la lista negra.
var_dump(opcache_get_configuration());
opcache_get_status()
:Esto devolverá una matriz con información sobre el estado actual de la memoria caché. Esta información incluirá cosas como: el estado en que se encuentra el caché (habilitado, reiniciando, lleno, etc.), el uso de memoria, aciertos, errores y alguna información más útil. También contendrá los scripts en caché.
var_dump(opcache_get_status());
opcache_reset()
:Restablece todo el caché. Lo que significa que todos los scripts en caché posibles se analizarán nuevamente en la próxima visita.
opcache_reset();
opcache_invalidate()
:Invalida un script en caché específico. Lo que significa que el script se analizará nuevamente en la próxima visita.
opcache_invalidate('/path/to/script/to/invalidate.php', true);
Hay algunas GUI creadas para ayudar a mantener OpCache y generar informes útiles. Estas herramientas aprovechan las funciones anteriores.
OpCacheGUI
Descargo de responsabilidad Soy el autor de este proyecto
caracteristicas:
Capturas de pantalla
URL: https://github.com/PeeHaa/OpCacheGUI
opcache-status
caracteristicas:
Captura de pantalla:
URL: https://github.com/rlerdorf/opcache-status
opcache-gui
caracteristicas:
Captura de pantalla:
Debido a que OPcache está diseñado para reemplazar el módulo APC, no es posible ejecutarlos en paralelo en PHP. Esto está bien para almacenar en caché el código de operación PHP, ya que ninguno de los dos afecta la forma en que escribe el código.
Sin embargo, significa que si actualmente está utilizando APC para almacenar otros datos (a través de la apc_store()
función), no podrá hacerlo si decide utilizar OPCache.
Deberá usar otra biblioteca, como APCu o Yac, que almacenan datos en la memoria compartida de PHP, o cambiar para usar algo como memcached, que almacena datos en la memoria en un proceso separado para PHP.
Además, OPcache no tiene equivalente del medidor de progreso de carga presente en APC. En su lugar, debe usar el Progreso de carga de la sesión .
La documentación para OPcache se puede encontrar aquí con todas las opciones de configuración enumeradas aquí . Las configuraciones recomendadas son:
; 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
Si usa una biblioteca o código que usa anotaciones de código, debe habilitar guardar comentarios:
opcache.save_comments=1
Si está deshabilitado, todos los comentarios de PHPDoc se eliminan del código para reducir el tamaño del código optimizado. Deshabilitar "Comentarios de Doc" puede romper algunas aplicaciones y marcos existentes (por ejemplo, Doctrine, ZF2, PHPUnit)
Voy a dejar caer mis dos centavos por lo que uso opcache.
Hice un marco extenso con muchos campos y métodos de validación y enumeraciones para poder hablar con mi base de datos.
Sin opcache
Cuando utilizo este script sin opcache y envío 9000 solicitudes en 2.8 segundos al servidor apache, alcanza un máximo de 90-100% de CPU por 70-80 segundos hasta que alcanza todas las solicitudes.
Total time taken: 76085 milliseconds(76 seconds)
Con opcache habilitado
Con opcache habilitado, funciona con un tiempo de CPU del 25-30% durante aproximadamente 25 segundos y nunca supera el uso de CPU del 25%.
Total time taken: 26490 milliseconds(26 seconds)
He creado un archivo de lista negra opcache para deshabilitar el almacenamiento en caché de todo, excepto el marco, que es todo estático y no necesita un cambio de funcionalidad. Elijo explícitamente solo los archivos de marco para poder desarrollar sin preocuparme por recargar / validar los archivos de caché. Tener todo en caché ahorra un segundo en el total de las solicitudes25546 milliseconds
Esto amplía significativamente la cantidad de datos / solicitudes que puedo manejar por segundo sin que el servidor 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;
Simplemente reemplace el; con una entrada en el archivo ini. Pero esto es lo que usé. sobre todo cosas por defecto
opcache.revalidate_freq=60;
determina cuánto tiempo puede vivir un archivo en la memoria en segundos. cuando se acabe el tiempo, vuelve a compilar el archivo.
opcache.revalidate_freq
controla con qué frecuencia se verifica la secuencia de comandos en busca de cambios (en función de si cambió su marca de tiempo). Por lo tanto, si la marca de tiempo de un script sigue siendo la misma que la última vez que se compiló, no se volverá a compilar. Todo esto supone que no ha cambiado la opcache.validate_timestamps
configuración, que está habilitada de forma predeterminada.
Con PHP 5.6 en Amazon Linux (debería ser el mismo en RedHat o CentOS):
yum install php56-opcache
y luego reinicie apache.
Encontré esto al configurar moodle. Agregué las siguientes líneas en el archivo 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