APC - > APCu / OPcache, rendimiento pobre


Tengo una instancia EC2 m3.xlarge que actualizé a PHP 5.5.11 hoy.

Con esta actualización, sobrescribió php55-pecl-apc con php55-pecl-apcu.

Después de leer y experimentar, entiendo que APC ha sido reemplazado por OPCache, excepto por un almacén de valores clave que se puede traer de vuelta con APCu.

Después de ajustar mi configuración a algo que parece razonable, usar Wordpress mientras está conectado ahora es terriblemente lento, al menos 300-900ms peor (el front-end se almacena en caché a través de varnish, y funciona perfecto... pero cuando estás usando el administrador deliberadamente no se almacena en caché, y lento como el pecado).

Hice una serie de puntos de referencia a medida que mejoraba, a través de un pequeño tamaño de muestra para cada paso. Se degradaba cada vez peor a medida que avanzaba.

  • APC (antes de la actualización) -->
  • OPcache + no APCu -->
  • OPcache + APCu + Plugin WP para APCu

Ahora mismo solo estoy pasando el rato con OPcache, y no APCu.

  1. ¿Cómo puedo lograr el ¿la misma actuación? Me encantó la interfaz de administración, me encantó lo rápido que era. Honestamente no veo cómo esto es una mejora en absoluto, es bastante deprimente en realidad... a menos que haya alguna super biblioteca por ahí de la que no sea consciente. Ciertamente no es lo que tengo, o tal vez no está configurado bien.
  2. Suponiendo que la respuesta a #1 es 'lo configuraste como bolas', entonces ¿te importaría echar un vistazo a esto y ver si esto es razonable?

Para mi configuración estoy usando último wordpress, algunos plugins grandes, pero no puedo quitarlos porque son importantes. Por suerte barniz se encarga de la mayor parte del trabajo. Tengo 4 núcleos, 16 GB de memoria, ~10k archivos en la raíz de mi sitio web. Tampoco tengo aplicaciones hardcore reales o cualquier otra cosa que Wordpress, es una configuración bastante vainilla. Creo que eso es todo por cosas que podrían ayudar.

Config:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.revalidate_path=0
opcache.save_comments=0
opcache.load_comments=0
opcache.fast_shutdown=1
opcache.enable_file_override=0
opcache.optimization_level=0xffffffff
opcache.inherited_hack=1
opcache.dups_fix=0
opcache.blacklist_filename=/etc/php-5.5.d/opcache*.blacklist
opcache.max_file_size=2M
opcache.consistency_checks=1
opcache.force_restart_timeout=180
opcache.error_log=/var/log/php-fpm/5.5/opcache.log
opcache.log_verbosity_level=1
opcache.preferred_memory_model=
opcache.protect_memory=0
Author: hakre, 2014-04-30

3 answers

Ahora mismo está revisando cada archivo en cada solicitud de cambios, que probablemente no es lo que desea en un sistema de producción.

Normalmente solo lo deshabilito (recuerde reiniciar el servidor web después de hacer cambios):

opcache.validate_timestamps=0

Alternativamente, puede intentar establecer la frecuencia a algo que no sea 0 y mantenerla habilitada:

opcache.validate_timestamps=1  
opcache.revalidate_freq=300

Esto debería teóricamente comprobar si hay cambios cada 5 minutos.

 16
Author: knrdk,
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-05-11 01:54:10

Usted también tiene

opcache.consistency_checks=1

Que según los documentos dice que ralentizará el rendimiento. Apaga eso.

opcache.consistency_checks integer

Si no es cero, OPcache verificará la suma de comprobación de caché cada N peticiones, donde N es el valor de esta directiva de configuración. Esto solo debe habilitarse al depurar, ya que perjudicará el rendimiento.

 7
Author: awhig,
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-04-13 13:32:48

Del RFC que se encargó de integrar OPcache en PHP:

APC puede recuperar la memoria de scripts antiguos invalidados. APC utiliza un administrador de memoria y puede recuperar la memoria asociada con un script que ya no está en uso; Optimizer+ funciona de manera diferente, y marca dicha memoria como 'sucia', pero nunca la recupera. Una vez que el porcentaje sucio sube por encima de un umbral configurable, Optimizer + se reinicia. Tenga en cuenta que este comportamiento tiene ventajas de estabilidad y desventaja.

Mi conjetura es que está golpeando el umbral que desencadena el reinicio de caché de opcode.

Referencia: https://wiki.php.net/rfc/optimizerplus#advantages_of_apc_over_optimizer

 5
Author: saboya,
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-07-17 06:47:31