Cómo utilizar PHP OPcache?


PHP 5.5 ha sido lanzado y cuenta con un nuevo módulo de almacenamiento en caché de código llamado OPcache, pero no parece haber ninguna documentación para él.

Entonces, ¿dónde está la documentación para ello y cómo uso OPcache?

 225
Author: Danack, 2013-06-21

5 answers

Instalación

OPcache está compilado por defecto en PHP5.5+. Sin embargo, está desactivado por defecto. Para comenzar a usar OPcache en PHP5.5+ primero tendrá que habilitarlo. Para hacer esto tendrías que hacer lo siguiente.

Añade la siguiente línea a tu 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 envolverlo entre comillas:

zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"

También tenga en cuenta que tendrá que usar la directiva zend_extension en lugar de la directiva "normal" extension porque afecta al motor Zend real (es decir, la cosa que ejecuta PHP).

Uso

Actualmente hay cuatro funciones que puedes usar:

opcache_get_configuration():

Devuelve un array que contiene la configuración utilizada actualmente por OPcache. Esto incluye todas las configuraciones de 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 cache. Esta información incluirá cosas como: el estado en el que se encuentra la caché (habilitado, reiniciando, lleno, etc.), el uso de memoria, aciertos, errores y algo más de información útil. También contendrá los scripts almacenados en caché.

var_dump(opcache_get_status());

opcache_reset():

Restablece toda la caché. Lo que significa que todos los scripts en caché posibles se analizarán de nuevo en la próxima visita.

opcache_reset();

opcache_invalidate():

Invalida un script en caché específico. Lo que significa que el script será analizado de nuevo en la próxima visita.

opcache_invalidate('/path/to/script/to/invalidate.php', true);

Mantenimiento e informes

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

Características:

  • Estado de OPcache
  • Configuración de OPcache
  • Estadísticas de OPcache
  • OPcache reset
  • Descripción general de los scripts en caché
  • Invalidación de scripts en caché
  • Multilingüe
  • Soporte para dispositivos móviles
  • Gráficos brillantes

Capturas de pantalla:

estatus

scripts en caché

grafica

mobilr

URL: https://github.com/PeeHaa/OpCacheGUI

opcache-estado

Características:

  • Estado de OPcache
  • OPcache configuración
  • Estadísticas de OPcache
  • Descripción general de los scripts en caché
  • En fila india

Captura de pantalla:

estatus

URL: https://github.com/rlerdorf/opcache-status

opcache-gui

Características:

  • Estado de OPcache
  • Configuración de OPcache
  • Estadísticas de OPcache
  • Restablecimiento de OPcache
  • Descripción general de los scripts en caché
  • Scripts en caché invalidación
  • Actualización automática

Captura de pantalla:

opcache-gui-descripción general

URL: https://github.com/amnuts/opcache-gui

 357
Author: PeeHaa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-04 00:00:46

OPcache sustituye a APC

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 opcode PHP, ya que ninguno 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á hacer eso si decide usar OPcache.

Necesitará usar otra biblioteca como APCu o Yac que ambos almacenan datos en memoria PHP compartida, o cambian para usar algo como memcached, que almacena datos en memoria en un proceso separado de PHP.

Además, OPcache no tiene un equivalente al medidor de progreso de carga presente en APC. En su lugar, debe usar el Progreso de carga de la sesión .

Ajustes para OPcache

La documentación para OPcache se puede encontrar aquí con todas las opciones de configuración mencionados aquí. El recomendado los ajustes 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 cualquier biblioteca o código que use 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 Doc" puede romperse algunas aplicaciones y marcos existentes (por ejemplo, Doctrine, ZF2, PHPUnit)

 150
Author: Danack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-28 22:52:10

Voy a dejar caer mis dos centavos por lo que uso opcache.

He hecho un extenso framework con muchos campos y métodos de validación y enumeraciones para poder hablar con mi base de datos.

Sin opcache

Cuando se utiliza este script sin opcache y envio 9000 solicitudes en 2.8 segundos al servidor apache, se maximiza en un 90-100% de cpu durante 70-80 segundos hasta que alcanza todas las solicitudes.

Total time taken: 76085 milliseconds(76 seconds)

Con opcache habilitado

Con opcache habilitado, se ejecuta en un 25-30% de tiempo de cpu durante aproximadamente 25 segundos y nunca pasa el 25% de uso de cpu.

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 cambiar la funcionalidad. Elijo explícitamente solo para los archivos del marco de trabajo para que pueda desarrollar sin preocuparme por recargar/validar los archivos de caché. Tener todo en caché ahorra un segundo en el total de las solicitudes 25546 milliseconds

Esto amplía significativamente la cantidad de datos/solicitudes que puedo manejar por segundo sin que el servidor se esfuerce.

 19
Author: Tschallacka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-12 12:04:23

Con PHP 5.6 en Amazon Linux (debería ser lo mismo en RedHat o CentOS):

yum install php56-opcache

Y luego reinicie apache.

 4
Author: Roger Dueck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-03 23:33:48

Me encontré con esto al configurar moodle. He añadido las siguientes líneas en php.archivo 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

Intl - > http://php.net/manual/en/book.intl.php

 2
Author: Anoop Toffy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-30 19:46:37