versiones - Symfony 2. Proyecto de migración a php 7 desde php5.5. Problemas de desempeño
php 5.6 to 7 migration (2)
Tengo un proyecto ~ 4 años, comencé con 5.3 y Symfony 2.0, migré a 5.5 y S2.3. En este momento migré a S2.8 y quiero migrar a php 7.
Como había tanto montón en torno al rendimiento de PHP 7, estaba ansioso por probar el rendimiento de mi proyecto en dev env.
Ejecutando benchmark en dev env; el servicio está en el host vagabundo que tiene tanto php5-fpm como php7.0-fpm, cerrando uno y configurando otro.
Esperaría que php7 superara a php5, pero básicamente parece que php7 es 1.5-2 veces más lento en mi entorno de desarrollo local.
¿Qué estoy haciendo mal? ¿O debería reescribir mi aplicación de alguna manera?
phpinfo: php 7 http://pastebin.com/a6a76vE2 php 5 http://pastebin.com/4GBXNmBB
PD Sí, entiendo que ejecutar benchmarks en dev env local no es 100% válido y puro, pero solo necesito entender si php7 es más rápido que php5, como se dijo.
U1
Lo más divertido es que blackfire muestra claramente que php 7 es ~ 45% más rápido que php 5. Pero cuando estoy asediando, veo que el rendimiento se degrada.
U2
Aquí está más o menos mi configuración personalizada para dev env. Es lo mismo para php5.5 y php7:
[Date]
date.timezone = Europe/Tallinn
[PHP]
memory_limit = 512M
expose_php = Off
cgi.fix_pathinfo = 0
post_max_size = 10M
upload_max_filesize = 10M
max_execution_time = 60
realpath_cache_size = 4096k
realpath_cache_ttl = 7200
error_reporting = E_ALL | E_STRICT
log_errors = On
error_log = /var/log/php.errors.log
display_errors = On
display_startup_errors = On
html_errors = On
; xdebug
xdebug.remote_enable = On
xdebug.remote_port = 9001
xdebug.max_nesting_level = 200
xdebug.remote_log = /tmp/xdebug.log
xdebug.remote_connect_back = on
xdebug.idekey = "vagrant"
[opcache]
opcache.enable_cli=0
opcache.save_comments=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=66000
opcache.fast_shutdown=1
opcache.enable=1
opcache.revalidate_freq=5
opcache.validate_timestamps=1
La razón de esto seguramente será el xdebug. Por favor, apáguelo y luego verifique el rendimiento.
Tengo que señalar que en nuestro caso después de cambiar de PHP5.5 / Symfony 2.0 a PHP7 / Symfony 3.0 encontramos una caída de rendimiento. Esto fue causado por la forma en que Symfony 2.8+ maneja las sesiones de php. Los almacena en un directorio local en lugar del directorio estándar / tmp que casi siempre se almacena en la memoria RAM. Entonces, si tiene un recuento bastante grande de archivos de sesión, la búsqueda del archivo desde el disco duro tarda mucho tiempo en comparación con la memoria RAM.
Después de eliminar esto en la configuración de Symfony, la aplicación comenzó a mostrar las mejoras de rendimiento que esperábamos.
Pocos pasos para optimizar el código PHP globalmente y para PHP7:
- compositor selfupdate
- actualización del compositor
- compositor dumpautoload -a
- activar zend opcache (o cualquier otro opcache php instalado)
- en php.ini:
- opcache.max_accelerated_files = 20000 (o más)
- opcache.validate_timestamps = 1
- opcache.revalidate_freq = 10 (o más)
- xdebug.default_enable = 0
- reinicie el servicio php-fpm7
Si aún persisten problemas de rendimiento, perfile su página de prueba típica con blackfire .